在从纵向研究中检查数据集时,我通常dplyr从原始数据的分析链中得到这样的结果:
df = data.frame(n_sessions=c(1,2,3,4,5), n_people=c(59,89,30,23,4))
Run Code Online (Sandbox Code Playgroud)
即,此时有多少参与者完成了一定数量的评估.
虽然知道有多少人完成了n次会话很有用,但我们更经常需要知道有多少人已经完成了至少n次会话.根据下表,标准累积和是不合适的,我们想要的是n_total列中的值,这是列中值的"前向累积和" n_people.即每行中的值应该是其自身值和超出它的所有值的总和,而不是标准累积和,它是所有值的总和,包括它自身:
n_sessions n_people n_total cumsum
1 59 205 59
2 89 146 148
3 30 57 178
4 23 27 201
5 4 4 205
Run Code Online (Sandbox Code Playgroud)
生成累积总和很简单:
mutate(df, cumsum = cumsum(n_people))
Run Code Online (Sandbox Code Playgroud)
什么是生成可以纳入dplyr分析链的"转发累积金额"的表达式?我猜这cumsum需要n_people在通过n_sessions降序排序之后应用,但是在保留数据帧的原始顺序的同时不能完全理解如何得到答案.