我正在尝试使用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))
答案 0 :(得分:4)
滚动意味着必然会缩短数据的部分原因。
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
最新评论:
要返回日期,您可以使用na.pad
参数rollmean
:
ddply(dat, .(country, ISIC), function(df) {df$rolled <- rollmean(df$Value, 3, na.pad=TRUE); return(df)})