我有以下示例数据集:
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的日期。
谢谢!
答案 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))