我正在尝试使用plyr计算滚动平均值。数据是行业-国家-年份,每个行业-国家重复观察。数据是不平衡的,但大多数行业国家都有大约15个观察值。
例如,数据如下所示:
country ISIC Year Value
Algeria 1 1990 400
Algeria 1 1991 450
Algeria 1 1992 460
Algeria 2 1990 450
Algeria 2 1991 500
Algeria 2 1992 450
Argentina 1 1990 400
Argentina 1 1991 450
Argentina 1 1992 460
Argentina 2 1990 450
Argentina 2 1991 500
Argentina 2 1992 450
. . . .
. . . .如果我将数据子集到特定的行业和国家,我可以计算滚动平均值,如下所示
rollmean(subdata$Value, 3)然而,我一直无法让它与plyr一起工作,从而计算出每个行业-国家组的滚动平均值。我试过了:
roll <- ddply(data, .(country, ISIC), summarize, rollmean(data$Value, 3))发布于 2012-04-05 03:53:54
滚动均值必然会缩短数据,这也是为什么会出现错误的原因。
ddply(dat, .(country, ISIC), function(df) data.frame(country=unique(df$country),
ISIC=unique(df$ISIC),
rolled=rollmean(df$Value, 3)))
country ISIC rolled
1 Algeria 1 436.6667
2 Algeria 2 466.6667
3 Argentina 1 436.6667
4 Argentina 2 466.6667然而,如果你对3个样本做滚动平均值,而你的数据只有3个样本,那么你只是在计算平均值:
ddply(dat, .(country, ISIC), summarise, mean(Value))
country ISIC ..1
1 Algeria 1 436.6667
2 Algeria 2 466.6667
3 Argentina 1 436.6667
4 Argentina 2 466.6667针对评论进行更新:
要返回日期,可以使用rollmean的na.pad参数
ddply(dat, .(country, ISIC), function(df) {df$rolled <- rollmean(df$Value, 3, na.pad=TRUE); return(df)})https://stackoverflow.com/questions/10018186
复制相似问题