删除包含值的行之后的所有行

标签 r

我试图删除一个(或多个)值之后的所有行,但遇到了一些麻烦。

我想做相反的事情: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/

相关文章:

r - 将 XTS 对象转换为 data.frame

r - 在 dplyr 的 mutate 中 try catch ?

mysql - 不允许再次使用已使用的命令

c++ - 通过命令行使用 R 时出错

java - R 中的 Weka 不工作 - 无法通过 WPM 加载 weka 包

不会终止的R概率模拟?

r - Shiny 的 react 性 ggplot 输出

r - 仅在一侧的图边距外绘制 abline

R:删除文本中的点但不删除标记小数点的点

R - 错误 : . onLoad 在 loadNamespace() 中失败 'rJava'