当有 n 个连续的虚拟人时进行子集化

Subseting when there are n consecutive dummies

我有一个数据框,我创建了一系列虚拟变量,然后将它们组合到我的最后一列中。我想知道我是否遇到连续 3 个 1 的情况,即在以下示例中是否有办法对给我行 3:5 的数据框进行子集化?

df <-  tibble(
      a= c(0, 0, 1, 1, 1, 0, 1, 1)
    )
df

# A tibble: 8 x 1
      a
  <dbl>
1     0
2     0
3     1
4     1
5     1
6     0
7     1
8     1

data.table 有一个很好的函数,称为 rleid,它根据 diff 不是 0 创建组。使用它,你可以做到,

library(tidyverse)

df %>% 
 group_by(grp = data.table::rleid(df$a)) %>% 
 filter(n() >= 3 & all(a == 1))