Name Trial# Result ResultsSoFar
1 Bob 1 14 14
2 Bob 2 22 36
3 Bob 3 3 39
4 Bob 4 18 57
5 Nancy 2 33 33
6 Nancy 3 87 120
您好,我说上面有数据框。什么是产生" ResultsSoFar"的最佳方式。列是该人的结果,包括该审判(Bob的结果不包括Nancy,反之亦然)。
答案 0 :(得分:5)
使用data.table即可:
library(data.table)
setDT(df)[, ResultsSoFar:=cumsum(Result), by=Name]
df
Name Trial. Result ResultsSoFar
1: Bob 1 14 14
2: Bob 2 22 36
3: Bob 3 3 39
4: Bob 4 18 57
5: Nancy 2 33 33
6: Nancy 3 87 120
注意:强>
如果Trial#
未排序,您可以执行setDT(df)[, ResultsSoFar:=cumsum(Result[order(Trial.)]), by=Name]
以获得正确的cumsum订单