4

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

谢谢

4

3 回答 3

4

如果xapply.quarterlythen 的结果:

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

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

于 2013-10-14T10:32:27.157 回答
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

于 2013-10-14T09:46:33.630 回答
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 来转换日期,但我确信还有很多其他方法可以编辑索引向量。

对我来说至关重要的是,即使 xts 对象是数据框,这也有效。

我这样做的原因只是为了让绘图上的轴标签到达它们直觉所属的位置。

于 2018-02-13T20:34:45.947 回答