在连续n个假人的情况下进行分组

时间:2019-02-15 12:35:06

标签: r dplyr subset tibble

我有一个数据框,并且创建了一系列虚拟变量,然后将它们组合到最后一列中。我想知道是否存在连续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

1 个答案:

答案 0 :(得分:5)

软件包data.table具有一个不错的功能,称为rleid,它基于diff不为0的情况创建组。使用它,您可以这样做,

library(tidyverse)

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