私が学んだこの脅威によると、次の 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
これで、最初の 2 つの obs に対して生成された NA があります。グループごとに。現在の obs のみを合計するように、代替手段の 1 つを調整する必要があります。(最後の 2 つの観測値) グループ インデックスが開始する場合 (位置 2)。これは、最後の n 値のウィンドウを考慮することができ、例外が処理されるように一般化できるはずです。
何か案が?