应用apply.quarterly()后,将每个季度的第一个月设置为索引。

时间:2013-10-14 02:51:15

标签: r xts

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()之后如何将每个季度的第一个月设置为索引?

由于

3 个答案:

答案 0 :(得分:4)

如果x是[{1}}的结果,那么:

apply.quarterly

time(x) <- as.Date(as.yearqtr(time(x))) 来自zoomod包所依赖的zoo包,所以它应该已经加载了。

答案 1 :(得分:1)

我遇到了很多这样的问题 - 通常它们是在我合并来自多个来源的数据时出现的,最简单的方法是在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更改回简单的整数日期。

答案 2 :(得分:0)

还可以编辑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