【发布时间】:2017-05-03 10:55:24
【问题描述】:
当 diff() 应用于 POSIXct 日期时间时,会得到意想不到的结果。差异的单位并不总是相同的。
在每小时递增的 POSIXct 日期时间中,diff() 按预期工作。如果小时数是连续的,则 diff 会为您提供小时差,如下所示。
beg = ISOdatetime(2016, 11, 6, 1, 0 ,0, tz="Americ/Los_Angeles")
end = ISOdatetime(2016, 11, 7, 23, 0 ,0, tz="Americ/Los_Angeles")
dte = seq(from=beg, to=end, by="hour")
del = diff(dte)
table(del)
del
1
46
如果有间隔,结果仍然是小时,这是有道理的。
dte = dte[-4]
del = diff(dte)
table(del)
del
1 2
44 1
现在,这是有趣的行为。
dte1 = sort(c(dte, dte[10]))
del = diff(dte1)
table(del)
del
0 3600 7200
1 44 1
在这里我添加了一个重复的小时,突然间,差异单位现在以秒为单位。
这是一个错误吗?
【问题讨论】:
-
这可能是不合理的,但由于如果您查看
dput(del)会正确报告单位,因此很难将其视为错误。 -
也许只有当您认为夏令时是人类社会中的一个错误时,这当然是可以辩护的。 (我假设这种差异的可能性与这个时间段达到 DST 的事实无关。)
-
@joran 不确定为什么与夏令时有关?
-
这是
difftime与units = "auto"的行为,这是减去日期时间的默认值。 -
只是看似巧合,不太可能,仅此而已。
标签: r date datetime time-series posix