我希望在具有自适应窗口的 data.table 中按组计算移动平均值,以便在时间序列的开头没有 NA。我知道如何使用 frollmean 并设置adaptive = TRUE 来做到这一点(例如参见 jangorecki 的响应this https://stackoverflow.com/questions/14926572/moving-average-with-varying-time-window-in-r线)。当 data.table 中的所有组的长度相同时,我可以使用相同的代码来工作,但当组的大小不同时,我会遇到错误。
例如,如果我的数据是
tmp = data.table(Gp = c(rep('A',6),rep('B',4)), Val = c(1,3,4,6,2,2,8,5,7,10))
我正在做长度为 3 的移动平均值,那么所需的响应是
> desired_output
Gp Val
1: A 1.00
2: A 2.00
3: A 2.67
4: A 4.33
5: A 4.00
6: A 3.33
7: B 8.00
8: B 6.50
9: B 6.67
10: B 7.33
我尝试了以下方法:
mov_window_len = vector("list",2)
mov_window_len[[1]] = c(1,2,rep(3,4))
mov_window_len[[2]] = c(1,2,rep(3,2))
tmp[,lapply(.SD, frollmean, n = mov_window_len, align = "right", adaptive = TRUE), by = Gp]
但我收到一条错误消息length of integer vector(s) provided as list to 'n' argument must be equal to number of observations provided in 'x'
任何解决此问题的帮助将不胜感激。提前致谢。