对于大多数人来说,我有一个问题可能是微不足道的。我尝试了很多,没有找到解决方案,所以如果有人能给我一个提示,我会很高兴的。起点是每周 xts - 时间序列。
Month Week Value Goal Dec 2011 W50 a a Dec 2011 W51 b mean(a,b) Dec 2011 W52 c mean(a,b,c) Dec 2011 W53 d mean(a,b,c,d) Jan 2012 W01 e e Jan 2012 W02 f mean(e,f) Jan 2012 W03 g mean(e,f,g) Jan 2012 W04 h mean(e,f,g,h) Feb 2012 W05 i i Feb 2012 W06 j mean(i,j)
请原谅Excel表示法,但我认为它很清楚我想要做什么:我想计算“值”列的左侧移动平均值,但仅针对相应月份,因为它显示在列目标。我尝试了 apply.monthly()和 period.apply()。但它并没有让我得到我想要的东西。你的sombody可以给我一个如何解决问题的提示吗?只是暗示我应该使用哪个功能就足够了!
非常感谢!
致以最诚挚的问候,
安德烈亚斯
答案 0 :(得分:2)
我希望我的问题是正确的。但是你正在寻找的是什么:
require(plyr)
require(PerformanceAnalytics)
ddply(data, .(Week), summarize, Goal=apply.fromstart(Value,fun="mean"))
这应该有用 - 虽然reproducible expample本来不错。
这就是它的作用。
df <- data.frame(Week=rep(1:5, each=5), Value=c(1:25)*runif(25)) #sample data
require(plyr)
require(PerformanceAnalytics)
df$Goal <- ddply(df, .(Week), summarize, Goal=apply.fromstart(Value,FUN="mean"))[,2]
结果:
Week Value Goal
1 1 0.7528037 0.7528037
2 1 1.9622622 1.3575330
3 1 0.3367802 1.0172820
4 1 2.5177284 1.3923936
当然,您可以通过帮助获取更多信息:?ddply
或?apply.fromstart
。
答案 1 :(得分:2)
apply.monthly
无效,因为它只会将一个值分配给期间的终点,而您希望为每个月期分配多个值。
您可以通过按月拆分xts数据,对每个数据应用累积平均函数,然后将列表重新组合在一起,来轻松完成此任务。
library(quantmod)
# Sample data
getSymbols("SPY")
spy <- to.weekly(SPY)
# Cumulative mean function
cummean <- function(x) cumsum(x)/seq_along(x)
# Expanding average calculation
spy$EA <- do.call(rbind, lapply(split(Cl(spy),'months'), cummean))