如何过滤掉Z列中最后一个值1之后的所有数据框行?

How to filter out all rows of data frame after the last value of 1 in the column Z?

我有以下数据框:

|  Y  |  Z  |
-----------------
  62     0
  65     0
  59     1
  66     0
  64     1
  64     1
  57     0
  68     1
  59     0
  60     0

如何过滤掉 Z 列,以便过滤掉最后一次出现值 1 之后的所有“剩余值”(在本例中是最后一个 1 之后的所有零)?在上面的示例中,过滤后的数据框将变为:

|  Y  |  Z  |
-----------------
  62     0
  65     0
  59     1
  66     0
  64     1
  64     1
  57     0
  68     1

此外,我如何对第一个 1 之前的所有值进行过滤(过滤掉它之前的所有值)..?

您可以像这样删除最后一次出现的值之后的所有行:

library(dplyr)

df %>% 
  slice(1:max(which(Z == 1)))

输出:

   Y Z
1 62 0
2 65 0
3 59 1
4 66 0
5 64 1
6 64 1
7 57 0
8 68 1

另一个可能的解决方案:

library(dplyr)

df %>%
  filter(!(Z == 0 & data.table::rleid(Z) %>% "%in%"(c(1, max(.)))))

#>    Y Z
#> 1 59 1
#> 2 66 0
#> 3 64 1
#> 4 64 1
#> 5 57 0
#> 6 68 1