簡體   English   中英

創建一個累積計數,直到前6行中的2行滿足條件為止

[英]create a cumulative count, until 2 of previous 6 rows meet a condition

如果列a等於1,我想開始一個累加的總和。 我想在前6行中的2行等於0時停止。

dplyr::tibble(a = c(1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1), 
          sum = c(1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 0, 1, 2, 3))

總和是我想要的輸出

理想情況下使用tidyverse

一種方法是找出在6行的間隔內找到兩個連續0的行,然后使用cumsum創建組並最終在每個組中取cumsum值。

library(dplyr)
library(purrr)

df %>%
   mutate(sum1 = map_dbl(seq_along(a), ~sum(a[. : max(.-6, 1)] == 0) >= 2)) %>%
   group_by(group = cumsum(sum1 != lag(sum1, default = first(sum1)))) %>%
   mutate(ans = cumsum(a)) %>%
   ungroup %>%
   select(-sum1, -group)

# A tibble: 14 x 2
#      a   ans
#   <dbl> <dbl>
# 1     1     1
# 2     1     2
# 3     1     3
# 4     1     4
# 5     1     5
# 6     1     6
# 7     1     7
# 8     1     8
# 9     0     8
#10     1     9
#11     0     0
#12     1     1
#13     1     2
#14     1     3

暫無
暫無

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

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