我想过滤在第一次出现特定列中的特定值之前删除所有行。例如,在下面的数据框中,我想在abccccc
首次出现在列+
中之前删除所有行。请注意,bob
的值第二次重复-我只想在第一次出现a
之前删除行。
bob
我希望生成的数据框如下所示:
bob
答案 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