在不平衡面板数据集中生成每个ID的所有先前观察的滚动平均值

Mac*_*ace 5 r plyr zoo

我正在尝试计算不平衡数据集的滚动方式.为了说明我的观点,我制作了这个数据的玩具示例:

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
Run Code Online (Sandbox Code Playgroud)

该列RollingAvg(Var)是我想要的,但不能得到.在的话,我要寻找的所有以前观测的滚动平均值Var为每ID.我曾尝试使用rollapply,并ddply在zoo和plyr包,但我看不出如何设置滚动窗口长度用于每个ID的所有的以前的意见.也许我应该使用plm包呢?任何帮助表示赞赏.

我在BALANCED面板数据集上看到了关于滚动方式的其他帖子,但我似乎无法推断他们对不平衡数据的回答.

谢谢,

中号

edd*_*ddi 7

使用data.table:

library(data.table)
d = data.table(your_df)

d[, RollingAvg := {avg = cumsum(Var)/seq_len(.N);
                   c(NA, avg[-length(avg)])},
    by = ID]
Run Code Online (Sandbox Code Playgroud)

(甚至简化)

d[, RollingAvg := c(NA, head(cumsum(Var)/(seq_len(.N)), -1)), by = ID]
Run Code Online (Sandbox Code Playgroud)

  • 你不应该使用`DT $ x = ...`和`data.table`来复制整个表,这正是它试图不做的事情.使用`:=`代替(阅读小插图) (2认同)