【问题标题】:Filter to remove all rows before the first time a particular value in a specific column appears过滤以在特定列中的特定值第一次出现之前删除所有行
【发布时间】:2021-04-10 09:41:36
【问题描述】:

我想在特定列中的特定值第一次出现之前过滤以删除所有行。例如,在下面的数据框中,我想删除bob 第一次出现在a 列中之前的所有行。请注意bob 的值第二次重复 - 我只想删除第一次出现bob 之前的行。

(dat<-data.frame(a= c("pete", "mike", "bob", "bart", "bob"), b=c(1,2,3,4,5), c=c("home", "away", "home", "away", "gone")))
     a b    c
1 pete 1 home
2 mike 2 away
3  bob 3 home
4 bart 4 away
5  bob 5 gone

我希望生成的数据框如下所示:

   a   b  c
1 bob  3 home
2 bart 4 away
3 bob  5 gone

【问题讨论】:

    标签: r


    【解决方案1】:

    dplyr 使用slice 的方式。

    library(dplyr)
    dat %>% slice(which.max(a == "bob") : n())
    
    #     a b    c
    #1  bob 3 home
    #2 bart 4 away
    #3  bob 5 gone
    

    在基础 R 中是

    dat[which.max(dat$a == "bob") : nrow(dat), ]
    

    【讨论】:

    • dat[match(TRUE, dat$ == "bob")[1]:nrow(dat), ]
    【解决方案2】:

    cumsum 通常是此类任务的理想人选

    dat[cumsum(dat$a == "bob") >= 1, ]
    #     a b    c
    #3  bob 3 home
    #4 bart 4 away
    #5  bob 5 gone
    

    【讨论】:

      【解决方案3】:

      我们可以使用cummax

      library(dplyr)
      dat %>%
           filter(cummax(a == "bob") > 0)
      #     a b    c
      #1  bob 3 home
      #2 bart 4 away
      #3  bob 5 gone
      

      【讨论】:

        猜你喜欢
        • 2022-01-12
        • 1970-01-01
        • 2021-08-29
        • 1970-01-01
        • 1970-01-01
        • 2020-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多