【问题标题】:Remove rows after first occurrence of a certain value在第一次出现某个值后删除行
【发布时间】:2017-06-28 13:01:39
【问题描述】:

我有以下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) 的重复项。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

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

    或者另一个选项是slicematch

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

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

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

    【讨论】:

    • 如果var1中没有5值,那么第三个选项可以编辑为:df %&gt;% filter(var1 &lt;= 5) %&gt;% slice(seq(which.max(var1)))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2022-11-22
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多