簡體   English   中英

dplyr的條件累積總和

[英]Conditional cumulative sum with dplyr

我正在嘗試使用dplyr計算條件累積總和,但遇到了麻煩。 我有一個數據框,只要條件為真,就想按組累加。 請參見以下示例:

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

我一直在考慮以下內容,但沒有用,有人有想法嗎?

dfb <- df %>% group_by(prod) %>%
 mutate(cum_sales = ifelse(act == TRUE, cumsum(sales), lag(sales))) 

謝謝!

由於將邏輯轉換為數字,對於FALSE表示0,對於TRUE 1,因此您可以將act乘以sales

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

這是base R中的一些其他選項

df$cum_sales <- with(df, ave(sales*act, prod, FUN = cumsum))

和數據data.table

library(data.table)
setDT(df)[, cum_sales := sales*act, by = prod]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM