首页 > 解决方案 > 如何创建按 2 个不同列分组的累积总和

问题描述

假设我有以下数据框,初始化为 df:

ID     date     value
A      01/2012  1
A      03/2012  2
A      05/2012  4
A      07/2012  3
A      09/2012  7
A      11/2012  1
A      01/2013  2
A      03/2013  8
A      05/2013  13
A      07/2013  2
A      09/2013  5
A      11/2013  2
B      01/2012  3
B      03/2012  9
B      05/2012  1
B      07/2012  0
B      09/2012  12
B      11/2012  3
B      01/2013  1
B      03/2013  4
B      05/2013  3
B      07/2013  3
B      09/2013  1
B      11/2013  1

其中日期变量的格式为 mm/yyyy。我正在寻找一种在此数据框中创建附加列的方法,该列给出按 ID 和年份分组的值列的累积总和。例如,以下输出是我想要的:

ID     date     value  cumsum
A      01/2012  1      1
A      03/2012  2      3
A      05/2012  4      7
A      07/2012  3      10
A      09/2012  7      17
A      11/2012  1      18
A      01/2013  2      2
A      03/2013  8      10
A      05/2013  13     23
A      07/2013  2      25
A      09/2013  5      30
A      11/2013  2      32
B      01/2012  3      3
B      03/2012  9      12
B      05/2012  1      13
B      07/2012  0      13
B      09/2012  12     25
B      11/2012  3      28
B      01/2013  1      1
B      03/2013  4      5
B      05/2013  3      8
B      07/2013  3      11
B      09/2013  1      12
B      11/2013  1      13

如您所见,每年的总和都会重置,但每个 ID 也会重置。本质上,我不确定如何创建按 2 列而不是 1 列分组的累积总和。任何帮助将不胜感激

标签: rcumsum

解决方案


可选解决方案:

library(data.tabe)
setDT(df)[,cumsum:=cumsum(value),by=.(ID,substr(date, 4,8))][]

推荐阅读