【发布时间】:2019-06-25 23:26:52
【问题描述】:
我试图找到两个不同组的累积总和,并将这些总和分别列在不同的列中。
这是数据框,按时间排序:
time group value
0 A 0
0 B 0
0 A 0
1 A 0
1 B 1
1 B 0
2 B 1
2 A 1
2 A 1
2 A -1
3 A 0
3 B 1
这是我必须按组查找 cumsum 并创建 cumsum 列:
df$cumsum <- ave(df$value, df$group, FUN=cumsum)
time group value cumsum
0 A 0 0
0 B 0 0
0 A 0 0
1 A 0 0
1 B 1 1
1 B 0 1
2 B 1 2
2 A 1 1
2 A 1 2
2 A -1 1
3 A 0 1
3 B 1 3
如何将结果分成两列,一列用于 A,另一列用于 B?或者,是否有可能找到有条件的 cumsum?无论哪种方式,我都希望结果如下所示:
time group value cumsum_A cumsum_B
0 A 0 0 0
0 B 0 0 0
0 A 0 0 0
1 A 0 0 0
1 B 1 0 1
1 B 0 0 1
2 B 1 0 2
2 A 1 1 2
2 A 1 2 2
2 A -1 1 2
3 A 0 1 2
3 B 1 1 3
谢谢!
【问题讨论】:
-
喜欢
cumsum(replace(dat$value, dat$group == "A", 0))? -
@StewartMacdonald - 我不认为这不会做同样的事情。这会在每个组中执行
cumsum,而不是cumsum,它会忽略输出分组而只计算一个组。