簡體   English   中英

dplyr中的“轉發”累積總和

[英]'Forward' cumulative sum in 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分析鏈中的“前向累積總和”的表達式是什么? 我猜想在將n_sessions降序排序后, cumsum將需要應用於n_people ,但是在保留數據幀的原始順序的同時,我不太了解如何獲取答案。

您可以對逆向矢量求和,然后對結果求逆。 內置的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM