首页 文章

修复纪元之前的split.xts行为(1-1-1970)

提问于
浏览
4

当我试图分割一个可以追溯到很久的对象时,我注意到了一些奇怪的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)

1960 Calendar

1979 Calendar

这似乎只是一个问题,持续数周,而不是几个月或几年 .

#Split the data, keep the last day of the month
lastdayofmonth <- do.call(rbind, lapply(split(data, "months"), last))
head(lastdayofmonth)
tail(lastdayofmonth)

这种行为似乎与以下行为有关,但我不确定为什么它仅适用于周 . 来自xts cran .

对于纪元(1970-01-01)之前的日期,结束时间与59.0000秒对齐 . 这是由于asPOSIXct的R实现中的bug /特性和C源代码级别的mktime0 . 这限制了1970年之前的范围精度,以及当前xts解决方法的1分钟粒度 .

我的解决方法是在1970年之前拆分数据对象之前改变日期,如果我在几周分裂的话 . 我希望别人有一个更优雅的解决方案(或避免错误的方法) .

编辑:要清楚问题是什么,我正在寻找一个答案:a)指明为什么会发生这种情况(因此我可以更好地理解错误的性质,从而避免它)和/或b)最好的解决方法处理它 .

1 回答

  • 4

    一个“解决方法”是检查Rev. 743或更早版本,因为在我看来,这在Rev. 744中有所破坏 .

    svn checkout svn://svn.r-forge.r-project.org/svnroot/xts/@743
    

    但是,更好的想法是提交错误报告,以便您不必永久使用旧版本 . (当然,自Rev 743以来,其他错误可能已被修补和/或添加了新功能)

相关问题