过滤以删除特定列中特定值之前的所有行,而该特定值出现多次

Filter to remove all rows before a particular value in a specific column, while this particular value occurs several time

我想过滤以删除特定列中特定值之前的所有行。例如,在下面的数据框中,我想删除 x 列中出现的“1”之前的所有行,因为“1”出现的次数不多。请注意,“1”的值重复了很多次,关于 a 列,我想删除 x 列中“1”之前的“NA”行。 谢谢

a   b   x
1   1   NA
1   2   NA
1   3   1
1   4   0
1   5   0
1   6   NA
1   7   NA
2   1   NA
2   2   NA
2   3   1
2   4   NA
2   5   0
2   6   0
2   7   NA
3   1   NA
3   2   NA
3   3   NA
3   4   NA
3   5   1
3   6   0
3   7   NA

期望的输出是这样的:

a   b   x
1   3   1
1   4   0
1   5   0
1   6   NA
1   7   NA
2   3   1
2   4   NA
2   5   0
2   6   0
2   7   NA
3   5   1
3   6   0
3   7   NA

这是否解决了您的问题?

library(tidyverse)

dat <- read.table(text = "a   b   x
1   1   NA
1   2   NA
1   3   1
1   4   0
1   5   0
1   6   NA
1   7   NA
2   1   NA
2   2   NA
2   3   1
2   4   NA
2   5   0
2   6   0
2   7   NA
3   1   NA
3   2   NA
3   3   NA
3   4   NA
3   5   1
3   6   0
3   7   NA", header = TRUE)

dat %>%
  group_by(a) %>%
  filter(cummax(!is.na(x)) == 1)
#> # A tibble: 13 × 3
#> # Groups:   a [3]
#>        a     b     x
#>    <int> <int> <int>
#>  1     1     3     1
#>  2     1     4     0
#>  3     1     5     0
#>  4     1     6    NA
#>  5     1     7    NA
#>  6     2     3     1
#>  7     2     4    NA
#>  8     2     5     0
#>  9     2     6     0
#> 10     2     7    NA
#> 11     3     5     1
#> 12     3     6     0
#> 13     3     7    NA

reprex package (v2.0.1)

创建于 2021-12-07