【发布时间】:2019-10-24 10:22:46
【问题描述】:
library(data.table)
set.seed(123)
d <- data.frame(ID = rep(1:5, each = 17), yearRef = rep(1998:2014, times = 5), y = sample(1:100, 17 * 5))
对于每个 ID,我想从 1998 年开始计算 y 的 7 年滚动平均值。然而,条件是在每个滚动窗口中,
我只选择 y 的前 5 个最高值来做平均值。例如
第一个滚动窗口是
1998-2004 - 只计算前 5 个最高 'y' 值的平均值
1999-2005 - 只计算前 5 个最高 'y' 值的平均值 . .
2007-2013 - 只计算前 5 个最高 'y' 值的平均值
2008-2014 - 只计算前 5 个最高 'y' 值的平均值
我有兴趣使用 data.table 来实现这一点。但是也可以接受其他建议。这是我尝试过的
d = setDT(d)
d[, avg.Y := frollmean(y, 7), by = ID]
如何输入另一个参数,对于每个滚动的 7 年窗口,我只选择前 5 个最高 y 值来计算平均值?
编辑
我还可能遇到某些 ID 可能没有至少 7 年的数据来进行移动平均的情况,在这种情况下,上述函数将为我提供 NA。对于那些 ID,是否可以简单地采用算术平均值?例如如果一个 ID 有 1998-2002 年的数据,在这种情况下,我可以简单地取 1998-2002 年的y 的平均值
【问题讨论】:
-
最好打开一个单独的问题,而不是编辑一个已经回答的问题
-
好的。我会这样做的。
标签: r dplyr data.table