dplyr的条件累加总和 [英] Conditional cumulative sum with dplyr
本文介绍了dplyr的条件累加总和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用dplyr计算条件累积总和,但遇到了麻烦。我有一个数据框,只要条件为真,就想按组累加。参见以下示例:
I'm trying to compute a conditional cumulative sum using dplyr but running into trouble. I have a dataframe and want to cumsum by group as long as a condition is true. See the following example:
df <- data.frame(prod = c("A", "A", "A", "A", "B", "B", "B", "B", "B"),
act = c(TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE),
sales = c(100,120, 190, 50, 30, 40, 50, 10, 30))
prod act sales
1 A TRUE 100
2 A TRUE 120
3 A TRUE 190
4 A FALSE 50
5 B TRUE 30
6 B TRUE 40
7 B FALSE 50
8 B FALSE 10
9 B FALSE 30
转到:
prod act sales cum_sales
1 A TRUE 100 100
2 A TRUE 120 220
3 A TRUE 190 410
4 A FALSE 50 410
5 B TRUE 30 30
6 B TRUE 40 70
7 B FALSE 50 70
8 B FALSE 10 70
9 B FALSE 30 70
我在思考在以下内容中,但是没有用,有人有想法吗?
I was thinking along the lines of the following but it's not working, anyone have ideas?
dfb <- df %>% group_by(prod) %>%
mutate(cum_sales = ifelse(act == TRUE, cumsum(sales), lag(sales)))
谢谢!
推荐答案
由于将逻辑转换为数字,对于 FALSE给出0
和1表示 TRUE
,您只需将 sales
乘以行为
:
Since converting a logical to numeric gives 0 for FALSE
and 1 for TRUE
, you can simply multiply sales
by act
:
library(dplyr)
df %>% group_by(prod) %>%
mutate(cum_sales = cumsum(sales*act))
prod act sales cum_sales
<fctr> <lgl> <dbl> <dbl>
1 A TRUE 100 100
2 A TRUE 120 220
3 A TRUE 190 410
4 A FALSE 50 410
5 B TRUE 30 30
6 B TRUE 40 70
7 B FALSE 50 70
8 B FALSE 10 70
9 B FALSE 30 70
这篇关于dplyr的条件累加总和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文