在dplyr中“转发”累积金额

时间:2016-08-28 22:09:51

标签: r dplyr

在检查纵向研究的数据集时,我通常会从原始数据的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,但在保留原始订单的同时无法完全理解如何获得答案数据框。

1 个答案:

答案 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