【问题标题】:create a cumulative count, until 2 of previous 6 rows meet a condition创建累积计数,直到前 6 行中的 2 行满足条件
【发布时间】:2019-07-10 09:50:56
【问题描述】:

如果 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))

sum 是我想要的输出

理想情况下使用tidyverse

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    一种方法是找出在 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
    

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      相关资源
      最近更新 更多