2

我正在尝试通过将两个数据系列合并到一个文件中来分析 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
4

3 回答 3

4

您可以通过indexAt="firstof"调用来to.monthly获取每月第一天的索引数据。

library(quantmod) 
getSymbols(c("USPRIV", "ICSA"), src="FRED")
merge(USPRIV, to.monthly(ICSA, indexAt="firstof", OHLC=FALSE))
于 2013-03-24T05:41:13.747 回答
0

像这样的东西:

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

请注意,日期被编码为行名,而不是结果中的列。

于 2013-03-23T23:28:57.853 回答
0

这是一个经常发生的问题。有时我会忘记自己的解决方案,而谷歌也不容易找到解决方案。所以我在这里发布我的解决方案。

基本上,只需将每月汇总系列的索引转换为yearmon. 您还可以选择将其转换回yyyy-mm-dd(每月 1 日)格式,使用as.date. 在删除确切的日期并且索引“均质化”后,所有列都完美对齐。

# Here with dplyr 
time(myxts)<- time(myxts) %>% as.yearmon() %%> as.date()
#or without dplyr
time(myxts)<-  as.date( as.yearmon( time(myxts) )  )
于 2020-03-14T08:15:19.960 回答