我有一个格式化为xts
对象的月度数据系列,其中有361个月的数据在2016年结束。以下是一个示例。
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
如果您有任何想法,请告诉我。为什么会这样。
答案 0 :(得分: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时区。