【问题标题】:xts subset quarterly dataxts 子集季度数据
【发布时间】:2014-08-09 05:41:40
【问题描述】:

我想对保存在 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

【问题讨论】:

    标签: r xts


    【解决方案1】:

    看起来像是时区问题。 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 Qq”不是 ISO8601 格式,因此不支持此操作。

    【讨论】:

    • 有什么方法可以正确地请求季度之间的数据范围?我尝试了一些方法,例如:a["1981.25/1984.00"]window(a, start=c(1981,2), end=c(1983,1))window(ts(a), start=c(1981,2), end=c(1983,1)) 但我无法让这些工作。
    • @moof:只用一个季度的一个月。 a["1981-01/1983-09"] 将返回 1981Q1-1983Q3。
    • 好的,我现在明白了,在时区更改后它可以工作了。看起来您想要的第一季度必须使用该季度的第一个月,而结束季度可以使用该季度的任何月份。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2021-08-18
    • 2017-11-14
    • 2014-08-11
    • 1970-01-01
    • 2012-08-02
    相关资源
    最近更新 更多