在尝试拆分可以追溯到很长一段时间的对象时,我注意到一些奇怪的 xts 行为。分裂的行为在时代发生变化。
#Create some data
dates <- seq(as.Date("1960-01-01"),as.Date("1980-01-01"),"days")
x <- rnorm(length(dates))
data <- xts(x, order.by=dates)
如果我们按周拆分 xts 对象,它将一周的最后一天定义为 1970 年之前的星期一。1970 年之后,它将其定义为星期日(预期行为)。
#Split the data, keep the last day of the week
lastdayofweek <- do.call(rbind, lapply(split(data, "weeks"), last))
head(lastdayofweek)
tail(lastdayofweek)
这似乎只是几个星期的问题,而不是几个月或几年的问题。
#Split the data, keep the last day of the month
lastdayofmonth <- do.call(rbind, lapply(split(data, "months"), last))
head(lastdayofmonth)
tail(lastdayofmonth)
该行为似乎与以下情况有关,但我不确定为什么它只适用于几周。来自xts 起重机。
对于纪元 (1970-01-01) 之前的日期,结束时间与 59.0000 秒对齐。这是由于在 C 源代码级别的 asPOSIXct 和 mktime0 的 R 实现中的错误/功能。这将 1970 年之前的范围精度限制为使用当前 xts 解决方法的 1 分钟粒度。
我的解决方法是在拆分 1970 年之前的数据对象之前更改日期,如果我在几周内拆分。我希望其他人有更优雅的解决方案(或避免错误的方法)。
编辑:为了清楚问题是什么,我正在寻找一个答案,a)指定为什么会发生这种情况(这样我可以更好地理解错误的性质,从而避免它)和/或 b)最好的解决方法来处理它。