过滤以在第一次出现特定列中的特定值之前删除所有行

时间:2019-04-11 07:13:28

标签: r

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

bob

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

bob

3 个答案:

答案 0 :(得分:3)

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), ]

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我们可以使用cummax

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