删除包含特定值的行及其后的所有行。

3

我想删除所有在某个值(或多个值)之后的行,但是遇到了一些问题。

我想做的是相反的: 过滤掉特定列中出现某个值之前的所有行

使用上述问题中的示例数据框:

(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之后的任何内容。


3
尝试使用 dat %>% slice(1 : which.max(a == "bob"))。该代码会选择第一行到第一个出现"bob"的行之间的所有行。 - dcarlson
2个回答

3
我们可以使用。
library(dplyr)
dat %>% 
     slice(seq(which.max(a == 'bob')))

或者使用 cumsum
dat %>% 
    filter(lag(cumsum(a == 'bob'), default = 0) < 1)

或者使用基础R语言

dat[seq_len(match('bob', dat$a)),]

3
使用 row_number()
library(dplyr)
dat %>% filter(row_number() <= match('bob', a))

#     a b    c
#1 pete 1 home
#2 mike 2 away
#3  bob 3 home

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接