4

我有一个对你们大多数人来说可能微不足道的问题。我尝试了很多,没有找到解决方案,所以如果有人能给我提示,我会很高兴。起点是每周xts时间序列。

月周价值目标
2011 年 12 月 W50 AA  
2011 年 12 月 W51 b 平均值(a,b)
2011 年 12 月 W52 c 平均值(a,b,c)
2011 年 12 月 W53 d 平均值(a,b,c,d)
2012 年 1 月 W01 EE
2012 年 1 月 W02 f 平均值(e,f)
2012 年 1 月 W03 g 平均值(e,f,g)
2012 年 1 月 W04 小时平均值(e,f,g,h)
2012 年 2 月 W05 ii
2012 年 2 月 W06 j 平均值(i,j)

请原谅 Excel 表示法,但我认为它很清楚我想要做什么:我想计算“值”列的左侧移动平均线,但仅针对相应的月份,因为它显示在目标列中. 我尝试了apply.monthly()period.apply()。但它没有得到我想要的。有人可以给我一个提示如何解决这个问题吗?只是提示我应该使用哪个功能就足够了!

非常感谢!

此致,

安德烈亚斯

4

2 回答 2

2

我希望你的问题是正确的。但这就是您要寻找的东西:

 require(plyr)
 require(PerformanceAnalytics)
 ddply(data, .(Week), summarize, Goal=apply.fromstart(Value,fun="mean"))

这应该可行 - 尽管一个可重复的示例会很好。

这就是它的作用。

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

于 2012-02-08T09:50:37.993 回答
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))
于 2012-02-08T11:05:54.287 回答