【问题标题】:Fix split.xts behaviour prior to the epoch (1-1-1970)修复纪元之前的 split.xts 行为 (1-1-1970)
【发布时间】:2016-06-21 00:01:13
【问题描述】:

在尝试拆分可追溯很久的对象时,我注意到一些奇怪的 xts 行为。 split 的行为在 epoch 发生变化。

#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 秒对齐。这是 由于在 C 源代码级别的 asPOSIXct 和 mktime0 的 R 实现中的错误/功能。这个 使用当前 xts 解决方法将 1970 年之前的范围精度限制为 1 分钟。

我的解决方法是在拆分对象以获取 1970 年之前的数据之前更改日期,如果我按周拆分的话。我希望其他人有更优雅的解决方案(或避免错误的方法)。

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

【问题讨论】:

  • 错误报告应通过电子邮件发送给维护者或在项目网页上归档。

标签: r xts


【解决方案1】:

一种“解决方法”是查看 Rev. 743 或更早版本,因为在我看来这在 Rev. 744 中出现了问题。

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

但是,很多更好的主意是提交错误报告,这样您就不必永远使用旧版本。 (当然,自 Rev. 743 以来可能已经修补了其他错误和/或添加了新功能)

【讨论】:

    猜你喜欢
    • 2010-11-08
    • 2012-11-09
    • 2011-01-16
    • 2012-09-27
    • 2018-03-21
    • 1970-01-01
    • 2018-07-24
    • 2014-01-22
    相关资源
    最近更新 更多