xts子集季度数据

时间:2014-06-18 18:33:51

标签: r xts

我想要在xts对象中保存一系列季度数据。

我看到文档说" xts提供了基于任何当前基于时间的类进行索引的工具。这些包括yearqtr"

但是我尝试了以下操作,它确实产生了一系列数据,但没有产生我要求的日期。

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

1 个答案:

答案 0 :(得分:0)

看起来像是时区问题。 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"],这是不受支持的,因为&#34; YYYY Qq&#34;不是ISO8601格式。