【问题标题】:'Forward' cumulative sum in dplyrdplyr 中的“转发”累积总和
【发布时间】:2016-08-28 22:09:51
【问题描述】:

在检查纵向研究的数据集时,我通常会从原始数据的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_sessions 降序排序后应用于n_people,但我不知道如何在保留数据框的原始顺序的同时获得答案。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以取反转向量的累积和,然后反转该结果。内置的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
    

    【讨论】:

    • 简单到令人尴尬!非常感谢这么快的答案,我仍然需要等待 10 分钟才能接受它。干杯。
    猜你喜欢
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 2019-02-15
    • 2015-07-31
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    相关资源
    最近更新 更多