删除第一次出现某个值后的行

use*_*264 3 r dplyr

我有以下 df:

df <- data.frame(var1 = c(1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9),
                 var2 = c("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"))
Run Code Online (Sandbox Code Playgroud)

我想在达到前 5 (var1) 后进行过滤。所以结果应该是:

  var1 var2
1    1    a
2    2    b
3    2    c
4    3    d
5    4    e
6    5    f
Run Code Online (Sandbox Code Playgroud)

我试过:

   df1 <- df %>%
     mutate(a = !duplicated(var1)) %>%
     filter(var1 < 6 & a == TRUE)
Run Code Online (Sandbox Code Playgroud)

但这里的问题是,它也删除了重复的 var2(c)。

akr*_*run 5

我们可以用它cumsum来创建一个逻辑vector

df %>% 
  filter(cumsum(var1 == 5) < 2)
#    var1 var2
#1    1    a
#2    2    b
#3    2    c
#4    3    d
#5    4    e
#6    5    f
Run Code Online (Sandbox Code Playgroud)

或者另一个选择slicematch

df %>%
   slice(seq(match(5, var1)))
Run Code Online (Sandbox Code Playgroud)

或者与which.max(假设有 5 值)

df %>%
   slice(seq(which.max(var1 == 5)))
Run Code Online (Sandbox Code Playgroud)