我想对一个xts对象中包含的季度数据进行子集。
我看到文档上写着:"xts提供了基于当前任何基于时间的类的索引功能,其中包括年度xts“。
但是,我已经尝试了以下方法,它们确实产生了一系列的数据,但不是我所要求的日期。
a = as.xts(ts(rnorm(20), start=c(1980,1), freq=4))
a["1983"] # Returns 1983Q2 - 1984Q1 ?
a["1983-01/"] # Begins in 1983Q2 ?
a["1981-01/1983-03"] # Returns 1981Q2 - 1983Q2 ?
a[as.yearqtr("1981 Q2")] # Correct
a[as.yearqtr("1981 Q1")/as.yearqtr("1983 Q3")] # Does not work发布于 2014-06-18 20:33:52
好像是时区问题。xts索引始终是一个POSIXct对象,即使索引类是其他类。与Date类索引一样,yearqtr (和yearmon)类索引应该将时区设置为"UTC"。
> a <- as.xts(ts(rnorm(20), start=c(1980,1), freq=4), tzone="UTC")
> a["1983"]
[,1]
1983 Q1 1.4877302
1983 Q2 -0.4594768
1983 Q3 -0.1906189
1983 Q4 -1.1518943
Warning message:
timezone of object (UTC) is different than current timezone (). 你可以安全地忽略这个警告。如果这真的困扰您,您可以通过以下方式将R会话的时区设置为"UTC":
> Sys.setenv(TZ="UTC")
> a <- as.xts(ts(rnorm(20), start=c(1980,1), freq=4))
> a["1983"]
[,1]
1983 Q2 1.84636890
1983 Q3 -0.06872544
1983 Q4 -2.29822631
1984 Q1 -1.46025131这是行不通的:
a[as.yearqtr("1981 Q1")/as.yearqtr("1983 Q3")] # Does not work看起来你想做的事情是:a["1981 Q1/1983 Q3"],因为"YYYY“不是ISO8601格式,所以它不受支持。
https://stackoverflow.com/questions/24293822
复制相似问题