总计与相同ID匹配的先前实例

时间:2018-11-16 19:14:45

标签: r

我有以下示例数据集:

    df <- data.frame(ID = c(1, 1, 1, 2, 2, 2), A = c("2018-10-12",
          "2018-10-12", "2018-10-13", "2018-10-14", "2018-10-15", "2018-10-16"), 
          B = c(1, 5, 7, 2, 54, 202))
  ID       A      B
1  1 2018-10-12   1
2  1 2018-10-12   5
3  1 2018-10-13   7
4  2 2018-10-14   2
5  2 2018-10-15  54
6  2 2018-10-16 202

我想做的是创建一个C列,该列是B的总和,但仅适用于各行之前的日期。例如,我要查找的输出是:

  ID       A      B   C
1  1 2018-10-12   1   1
2  1 2018-10-12   5   6
3  1 2018-10-13   7   13
4  2 2018-10-14   2   2
5  2 2018-10-15  54   56
6  2 2018-10-16 202   258

当我有这些问题时,我通常将使用子集来进行单独的求和运算,但是我不确定如何在新列中进行此操作。

我的最终目标是确定每个ID(如果适用)超过50的日期。

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以按累计和进行分组以创建“ C”列

library(dplyr)
df %>% 
  group_by(ID) %>% 
  mutate(C = cumsum(B))

或使用data.table

library(data.table)
setDT(df)[, C := cumsum(B), by = ID]

或带有base R

df$C <- with(df, ave(B, ID, FUN = cumsum))