根据我了解到的这种威胁,以下 data.table 中变量 b 的滚动总和可以实现如下:
数据创建+计算滚动总和:
x <- data.table(a = sample(letters[1:3], 100, replace = TRUE), b = runif(100))
setorder(x, a)
# alternative 1
x[, .(b, Reduce(`+`, shift(b, 0:2))), by = a]
# alternative 2
x[, .(b, stats::filter(b, rep(1, 3), sides = 1)), by = a]
当前 + 所需输出:
a b V2 V2_desired
1: a 0.457665568 NA 0.457665568
2: a 0.752555834 NA 1.210221
3: a 0.864672124 2.0748935 2.0748935
4: a 0.542168656 2.1593966 2.1593966
5: a 0.197962875 1.6048037 1.6048037
现在有为前两个 obs 生成的 NA。在每个按组。我需要调整其中一种选择以仅对当前 obs 求和。(最后两个 obs。)在组索引开始的情况下(在位置 2)。这应该是可概括的,以便我可以考虑最后 n 个值的窗口并处理异常。
任何想法?