我正在尝试计算不平衡数据集的滚动方式.为了说明我的观点,我制作了这个数据的玩具示例:
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面板数据集上看到了关于滚动方式的其他帖子,但我似乎无法推断他们对不平衡数据的回答.
谢谢,
中号
使用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)