[英]Rolling Mean with Plyr
我正在嘗試使用 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))
滾動均值必然會縮短數據,這是您出錯的部分原因。
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)})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.