第一次达到一定值后,Dplyr R过滤

时间:2017-06-28 13:01:39

标签: 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"))

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

  var1 var2
1    1    a
2    2    b
3    2    c
4    3    d
5    4    e
6    5    f

我试过了:

   df1 <- df %>%
     mutate(a = !duplicated(var1)) %>%
     filter(var1 < 6 & a == TRUE)

但这里的问题是它也删除了副本var2(c)。

1 个答案:

答案 0 :(得分:4)

我们可以使用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

或另一个选项slice match

df %>%
   slice(seq(match(5, var1)))

which.max(假设有5个值)

df %>%
   slice(seq(which.max(var1 == 5)))