按顺序计算总和序列

WCM*_*CMC 2 r data.table

假设我有一个data.table

data.table(A=c(1,2,3,4,5,6,4,2))
Run Code Online (Sandbox Code Playgroud)

如何计算n元素序列的总和?

假设n=3,A的序列和的结果应该是列seq_sum,

data.table(A=c(1,2,3,4,5,6,4,2),seq_sum=c(1+2+3,2+3+4,3+4+5,4+5+6,5+6+4,6+4+2,4+2,2))
Run Code Online (Sandbox Code Playgroud)

如何有效地做到这一点?

Jaa*_*aap 7

另一种选择是使用Reduceshift:

dt[, seq_sum := Reduce(`+`, shift(A, 0:2, 0, 'lead'))]
Run Code Online (Sandbox Code Playgroud)

这使:

> dt
   A seq_sum
1: 1       6
2: 2       9
3: 3      12
4: 4      15
5: 5      15
6: 6      12
7: 4       6
8: 2       2
Run Code Online (Sandbox Code Playgroud)

带参数名称的完整符号:

dt[, seq_sum := Reduce(`+`, shift(A, n = 0:2, fill = 0, type = 'lead'))]
Run Code Online (Sandbox Code Playgroud)