5

不均衡なデータ セットのローリング平均を計算しようとしています。私の要点を説明するために、このデータのおもちゃの例を作成しました。

ID  year  Var   RollingAvg(Var)
1   2000  2     NA
1   2001  3     2
1   2002  4     2.5
1   2003  2     3
2   2001  2     NA
2   2002  5     2
2   2003  4     3.5

RollingAvg(Var)は私が欲しいものですが、取得できません。Varつまり、 for eachの以前のすべての観測値のローリング平均を探していますID。andパッケージでrollapplyandを使用しようとddplyしましたが、ローリング ウィンドウの長さを設定して、各 ID の以前のすべての観測値を使用する方法がわかりません。代わりに plm パッケージを使用する必要がありますか? どんな助けでも大歓迎です。zooplyr

BALANCED パネル データ セットのローリング平均に関する他の投稿を見たことがありますが、不均衡なデータに対する回答を推定することはできないようです。

ありがとう、

M

4

2 に答える 2

2

年が各 ID 内で連続しており (サンプル データの場合)、 が入力データ フレームであると仮定すると、DF基数 R のみを使用したソリューションを cumRoll次に示しaveます。 :

cumRoll <- function(x) c(NA, head(cumsum(x) / seq_along(x), -1))
DF$Roll <- ave(DF$Var, DF$ID, FUN = cumRoll)

結果は次のとおりです。

> DF
  ID year Var Roll
1  1 2000   2   NA
2  1 2001   3  2.0
3  1 2002   4  2.5
4  1 2003   2  3.0
5  2 2001   2   NA
6  2 2002   5  2.0
7  2 2003   4  3.5
于 2013-04-19T19:37:31.263 に答える