我想要在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
答案 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格式。