【问题标题】:Set the first month of each quarter as the index after applying apply.quarterly()应用 apply.quarterly() 后设置每个季度的第一个月为索引
【发布时间】:2013-10-14 02:51:14
【问题描述】:

apply.quarterly() 只给出每个季度的结束月份作为索引,见下面的例子:

library(quantmod)
getSymbols.FRED("CPILFESL")
apply.quarterly(CPILFESL,mean)

        CPILFESL
1957-03-01  28.60000
1957-06-01  28.83333
1957-09-01  29.03333
1957-12-01  29.26667
1958-03-01  29.40000
1958-06-01  29.53333
...

我真正想要的是:

        CPILFESL
1957-01-01  28.60000
1957-04-01  28.83333
1957-07-01  29.03333
1957-10-01  29.26667
1958-01-01  29.40000
1958-04-01  29.53333
...

那么在应用apply.quarterly()之后,如何将每个季度的第一个月设置为索引呢?

谢谢

【问题讨论】:

  • 您认为为什么需要这样做?可能有一种更简单的方法可以完成您想做的任何事情。
  • 我有几个时间序列要处理,其中一些是季度的,一些不是。因此,首先我必须像示例中那样对每月数据进行聚合。但与此同时,我还必须设置相同的开始日期和结束日期来提取所有时间序列的部分数据。不同的索引方法会导致一些问题(为不同频率的数据提取不同数量的观察值。)您的评论确实让我更多地思考这个问题。我只是稍微调整一下日期以完成它(特别是:end.date
  • 尽管我已经通过调整结束日期完成了我的工作,但我仍然认为如果可以为某些人提供一些更通用的方法(如果有的话)可能会有所帮助更一般的用途,考虑到时间序列的索引仍然存在一些不一致。

标签: r xts


【解决方案1】:

如果xapply.quarterly 的结果,那么:

time(x) <- as.Date(as.yearqtr(time(x)))

as.yearqtr 来自 quantmod 包所依赖的 zoo 包,所以应该已经加载了。

【讨论】:

  • +1,整洁。您可以使用类似的技巧到达本季度的中旬吗?将日期更改为每月的第一天或最后一天是否有类似的情况?
  • @ricardo,以上同time(x) &lt;- as.Date(as.yearqtr(time(x)), frac = 0)。将季度中的 0 更改为 0.5 或季度末的 1。
【解决方案2】:

我遇到过很多这样的问题——通常是在我合并来自多个来源的数据时出现的,最简单的方法是在 R 聚合步骤中更改输出。

为此,我有一堆辅助函数。这是一个简单的函数,可以为您更改月份。

library(quantmod)
getSymbols("CPILFESL", src = 'FRED')
qd <- apply.quarterly(CPILFESL,mean)

monthSwitch <- function(index, monChng) {
    index_LT <- as.POSIXlt(index)
    index_LT$mon <- index_LT$mon + monChng
    as.Date(index_LT)
}

index(qd) <- monthSwitch(index(qd), -2)

基本直觉是这样的:改成POSIXlt,直接编辑月份值,然后用as.Date改回简单的整数日期。

【讨论】:

    【解决方案3】:

    也可以编辑 xts 索引向量本身!

    library(xts)
    library(lubridate)
    test_daily <- xts(1:365, Sys.Date()+1:365)
    test_monthly <- apply.monthly(test_daily,mean)
    index(test_monthly) <- floor_date(index(test_monthly),"month")
    test_monthly  
    

    我正在使用lubridate to convert the dates,但我确信还有很多其他方法可以编辑索引向量。

    对我来说至关重要的是,即使 xts 对象是数据框,它也能正常工作。

    我这样做的原因只是为了将绘图上的轴标签设置为land where they intuitively belong

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2011-10-28
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      相关资源
      最近更新 更多