我试图删除一个(或多个)值之后的所有行,但遇到了一些麻烦。
我想做相反的事情:Filter to remove all rows before the first time a particular value in a specific column appears
使用上述问题中的示例数据框:
(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 pete 1 home
2 mike 2 away
3 bob 3 home
到目前为止,这是我尝试过的:
dat %>% slice(which.min(a == "bob") : n())
但与 which.max
不同,它删除了 bob
之前的所有内容,这不会删除它之后的任何内容。
最佳答案
我们可以使用
library(dplyr)
dat %>%
slice(seq(which.max(a == 'bob')))
或者用cumsum
dat %>%
filter(lag(cumsum(a == 'bob'), default = 0) < 1)
或者在base R
dat[seq_len(match('bob', dat$a)),]
关于删除包含值的行之后的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67029667/