在检查纵向研究的数据集时,我通常会从原始数据的dplyr
分析链中得到这样的结果:
df = data.frame(n_sessions=c(1,2,3,4,5), n_people=c(59,89,30,23,4))
即。计算此时有多少参与者完成了一定数量的评估。
虽然了解有多少人已完成 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
生成累积总和很简单:
mutate(df, cumsum = cumsum(n_people))
生成可以合并到dplyr
分析链中的“转发累积金额”的表达式是什么?我猜测cumsum
在按n_people
降序排序之后需要应用n_sessions
,但在保留原始订单的同时无法完全理解如何获得答案数据框。
答案 0 :(得分:9)
您可以获取反转向量的累积和,然后反转该结果。内置的rev函数在这里很有用:
mutate(df, rev_cumsum = rev(cumsum(rev(n_people))))
例如,在您的数据上,它返回:
n_sessions n_people rev_cumsum
1 1 59 205
2 2 89 146
3 3 30 57
4 4 23 27
5 5 4 4