xts子集化会在几个月内提供不正确的结果

时间:2015-08-02 23:47:50

标签: r time-series subset xts

我在Mac OS X上使用R 3.2.1,似乎在xts子集中遇到了错误的行为。简而言之,每月数据的子集给出的结果与应有的结果相差1个月。这是一个简单的例子,类似于我正在做的古温度分析:

首先,我将为该示例制作一些测试数据:

xts.test <- xts(rnorm(440*12, mean=0, sd=10),order.by=timeBasedSeq(155001/1989))

这会产生正确的xts文件AFAICT。这是12个月的第一年。

head(xts.test, 12L)

               [,1]
Jan 1550 -6.9301845  
Feb 1550 12.1581413  
Mar 1550  3.9688139  
Apr 1550  3.9540268  
May 1550  9.8200923  
Jun 1550 -4.2090998  
Jul 1550  7.5950340  
Aug 1550 -6.5967389  
Sep 1550 -0.6736532  
Oct 1550  6.4939221  
Nov 1550  4.3916465  
Dec 1550 19.8800872  

但是,当我尝试选择一年时,我会得到以下结果:

xts.test["1550"]

               [,1]
Feb 1550 12.1581413  
Mar 1550  3.9688139  
Apr 1550  3.9540268  
May 1550  9.8200923  
Jun 1550 -4.2090998  
Jul 1550  7.5950340  
Aug 1550 -6.5967389  
Sep 1550 -0.6736532  
Oct 1550  6.4939221  
Nov 1550  4.3916465  
Dec 1550 19.8800872  
Jan 1551 -2.9549224  

也就是说,而不是正确的15 - 15年1月 - 12月,我得到1550年2月到1551年1月

当我尝试通过选择一年中的几个月进行分组时,我得到了类似的延迟。 c(2, 3,4,5,6,7)让我四月到九月而不是三月到八月。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

这是最近development version on GitHub已修复的错误。

R> require(xts)
R> xts.test <- xts(rnorm(440*12, mean=0, sd=10),order.by=timeBasedSeq(155001/1989))
R> packageVersion("xts")
[1] ‘0.9.7’
R> str(xts.test)  # notice TZ is not set
An ‘xts’ object on Jan 1550/Dec 1989 containing:
  Data: num [1:5280, 1] -8.11 -7.65 2.07 -3.29 17.03 ...
  Indexed by objects of class: [yearmon] TZ: 
  xts Attributes:  
 NULL

请注意,上面没有设置TZ,但是它已在下面的新版本中设置。

R> packageVersion("xts")
[1] ‘0.9.8’
R> str(xts.test)  # notice TZ is set
An ‘xts’ object on Jan 1550/Dec 1989 containing:
  Data: num [1:5280, 1] 0.357 12.318 24.291 22.181 6.123 ...
  Indexed by objects of class: [yearmon] TZ: UTC
  xts Attributes:  
 NULL