假设我有一个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)
如何有效地做到这一点?
另一种选择是使用Reduce和shift:
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)