Plyr的滚动平均值

时间:2012-04-04 19:45:10

标签: r 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))

1 个答案:

答案 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)})