2

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))
4

1 に答える 1

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)})
于 2012-04-04T19:53:53.563 に答える