#r
#r
Вопрос:
Я хотел бы отфильтровать, чтобы удалить все строки до первого появления определенного значения в определенном столбце. Например, в приведенном ниже фрейме данных я хотел бы удалить все строки до bob
того, как они появятся в столбце a
в первый раз. Пожалуйста, обратите внимание, что значение bob
повторяется во второй раз — я хочу удалить строки только до появления первого раза bob
.
(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 bob 3 home
2 bart 4 away
3 bob 5 gone
Ответ №1:
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.
dat[match(TRUE, dat$ == "bob")[1]:nrow(dat), ]
Ответ №2:
cumsum
обычно является хорошим кандидатом для таких задач
dat[cumsum(dat$a == "bob") >= 1, ]
# a b c
#3 bob 3 home
#4 bart 4 away
#5 bob 5 gone
Ответ №3:
Мы можем использовать cummax
library(dplyr)
dat %>%
filter(cummax(a == "bob") > 0)
# a b c
#1 bob 3 home
#2 bart 4 away
#3 bob 5 gone