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,反之亦然)。
使用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订单