Фильтр для удаления всех строк до первого появления определенного значения в определенном столбце. - PullRequest
2 голосов
/ 11 апреля 2019

Я хотел бы отфильтровать, чтобы удалить все строки до того, как в первый раз появится определенное значение в определенном столбце.Например, в приведенном ниже кадре данных я хотел бы удалить все строки до того, как 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

Ответы [ 3 ]

3 голосов
/ 11 апреля 2019

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), ]
2 голосов
/ 11 апреля 2019

cumsum обычно является хорошим кандидатом для таких задач

dat[cumsum(dat$a == "bob") >= 1, ]
#     a b    c
#3  bob 3 home
#4 bart 4 away
#5  bob 5 gone
1 голос
/ 11 апреля 2019

Мы можем использовать cummax

library(dplyr)
dat %>%
     filter(cummax(a == "bob") > 0)
#     a b    c
#1  bob 3 home
#2 bart 4 away
#3  bob 5 gone
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...