我正在尝试通过将两个数据系列合并到一个文件中来分析R中1年变化百分比的数据。一个系列是每周,另一个是每月。问题是将每周系列转换为每月系列。在通过apply.monthly()
合并两个文件后,在每周数据上使用merge.xts()
会创建一个月度文件,但其月内日期与月度系列中的月首日格式不匹配。问题:如何将两个系列的结果合并文件(以下示例)更改为一个月条目?
2012-11-01 0.02079801 NA
2012-11-24 NA -0.03375796
2012-12-01 0.02052502 NA
2012-12-29 NA 0.04442094
2013-01-01 0.01881466 NA
2013-01-26 NA 0.06370272
2013-02-01 0.01859883 NA
2013-02-23 NA 0.02999318
您可以在呼叫中将indexAt="firstof"
传递给to.monthly
,以使用索引的当月第一个月获取每月数据。
library(quantmod)
getSymbols(c("USPRIV", "ICSA"), src="FRED")
merge(USPRIV, to.monthly(ICSA, indexAt="firstof", OHLC=FALSE))
类似这样的东西:
do.call(rbind, by(d[-1], d[[1]] - as.POSIXlt(d[[1]])$mday, FUN=apply, 2, sum, na.rm=TRUE))
## V2 V3
## 2012-10-31 0.02079801 -0.03375796
## 2012-11-30 0.02052502 0.04442094
## 2012-12-31 0.01881466 0.06370272
## 2013-01-31 0.01859883 0.02999318
请注意,日期被编码为行名,而不是结果中的列。
这是一个经常发生的问题。有时我会忘记自己的解决方案,而google不会轻易导致这种情况。所以我在这里发布我的解决方案。
[基本上,只需将每月汇总系列的索引转换为yearmon
。您也可以使用yyyy-mm-dd
将其转换回as.date
格式(每月1号)。除去确切的日期并且索引被“均质化”之后,所有列均会完美对齐。
# Here with dplyr
time(myxts)<- time(myxts) %>% as.yearmon() %%> as.date()
#or without dplyr
time(myxts)<- as.date( as.yearmon( time(myxts) ) )