簡體   English   中英

用 Plyr 滾動平均

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM