R: Удалить строки, которые удовлетворяют условию на основе периода времени - PullRequest
0 голосов
/ 30 января 2019

У меня есть данные с тысячами субъектов, каждый из которых содержит несколько строк для каждого идентификатора.Вот отрывок человека из моих данных:

    ID      servicedate   firstdate     group      firstdateplus90
    AAA     01/01/2019    01/01/2019    A          04/01/2019
    AAA     03/01/2019    01/01/2019    B          04/01/2019

Я хотел бы удалить все предметы, такие как AAA, где в 90-дневном интервале времени с даты 1 у них есть строка, указывающая, что онив другой группе.В приведенном выше примере субъект ААА начинался в группе А, но к 01/01/2019, то есть до 01.04.2009 (90 дней с даты 1), они находятся в группе В.

Я впервые попробовалсоздать новую переменную, которая скажет нам, в какой группе был субъект на первом свидании:

mydata <- mydata %>% group_by(ID) %>%
mutate(first_group= {if(firstdate == servicedate) group[min(which(firstdate == servicedate))] else NA})

Но я не совсем уверен, куда идти дальше, или есть более простой способ выделить из неготе, чья группа в firstdateplus90 не равна группе на первой дате.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 30 января 2019

Это сработало для меня:

df <-  data.frame(ID = c("AAA","AAA", "AAA", "BBB", "BBB"),
           servicedate = as_date(c(17774, 17794, 17804, 17374, 17386)),
           group = c("A", "A", "B", "A", "A"))

    df %>%
      anti_join(df %>%
      group_by(ID) %>%
        filter(servicedate - min(servicedate) < 90 & group != group[servicedate == min(servicedate)]) %>%
 select(ID))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...