2016-01-22 36 views
0

我格式化为3.61个月,截至2016年数据的xts对象每月的数据系列的下面是一个示例。子集的年化收益从二月的数据生成R XTS对象一月次年

Jan 2015 20.97 
Feb 2015 13.34 
Mar 2015 15.29 
Apr 2015 14.55 
May 2015 13.84 
Jun 2015 18.23 
Jul 2015 12.12 
Aug 2015 28.43 
Sep 2015 24.50 
Oct 2015 15.07 
Nov 2015 16.13 
Dec 2015 18.21 
Jan 2016 27.59 

我试图提取子集VIXCLS["2015/"]。当我收回结果时,从2015年2月开始,到2016年1月结束。我还尝试提取特定的月份(例如:VIXCLS["2015-12-31]),并在1月时间戳后回复2015年1月的数据。

VIXCLS['2015-12-31'] 
#   VIXCLS 
# Jan 2016 27.59 

请让我知道,如果你有任何想法,为什么发生这种情况。

+1

请发布您的数据或样本的“dput”。这将保留格式和属性。 – 2016-01-22 03:09:18

+0

......看到:如何创建一个最小的,完整的,并且可验证的示例](http://stackoverflow.com/help/mcve)。 –

回答

1

这可能是一个时区问题。您的索引是yearmon,它没有时区。但是你的xts对象可能有一个非UTC时区,这会导致转换问题。例如,该XTS对象有我的本地时区,所以子集可以作为你的描述:

VIXCLS <- structure(c(20.97, 13.34, 15.29, 14.55, 13.84, 18.23, 12.12, 28.43, 24.5, 
    15.07, 16.13, 18.21, 27.59), .Dim = c(13L, 1L), index = structure(c(1420070400, 
    1422748800, 1425168000, 1427846400, 1430438400, 1433116800, 1435708800, 
    1438387200, 1441065600, 1443657600, 1446336000, 1448928000, 1451606400), 
    tzone = "", tclass = "yearmon"), class = c("xts", "zoo"), 
    .indexCLASS = "yearmon", tclass = "yearmon", .indexTZ = "", tzone = "") 
VIXCLS['2015/'] 
#   [,1] 
# Feb 2015 13.34 
# Mar 2015 15.29 
# Apr 2015 14.55 
# May 2015 13.84 
# Jun 2015 18.23 
# Jul 2015 12.12 
# Aug 2015 28.43 
# Sep 2015 24.50 
# Oct 2015 15.07 
# Nov 2015 16.13 
# Dec 2015 18.21 
# Jan 2016 27.59 

但如果我设置indexTZ"UTC",问题消失:

indexTZ(VIXCLS) <- "UTC" 
VIXCLS['2015/'] 
#   [,1] 
# Jan 2015 20.97 
# Feb 2015 13.34 
# Mar 2015 15.29 
# Apr 2015 14.55 
# May 2015 13.84 
# Jun 2015 18.23 
# Jul 2015 12.12 
# Aug 2015 28.43 
# Sep 2015 24.50 
# Oct 2015 15.07 
# Nov 2015 16.13 
# Dec 2015 18.21 
# Jan 2016 27.59 

如果你得到有关对象时区的警告与当地时区不同,您可以使用options(xts_check_TZ=FALSE)将其禁止。

还要注意,这是在xts on GitHub的开发版本中更正的。没有时区属性的索引类不允许有非UTC时区。

+0

谢谢。子设置功能现在按预期工作。但是,正如您所指出的那样,它会给出警告消息。我发现这个消息也可以通过设置Sys.setenv(TZ =“UTC”)消除。 – Robi