Фильтровать строки с более ранней датой, чем строка, указанная другой переменной - PullRequest
0 голосов
/ 13 декабря 2018

Я бы хотел отфильтровать все Med = 0 (сгруппированные по идентификатору) только в том случае, если Med 0 встречается на дату раньше, чем Date для Med = 1.Как это можно сделать с помощью dplyr, base r или других пакетов.

df <- read.table(header = TRUE, text = "
              ID  Med  date        
               1  0     2006-01-01 
               1  0     2006-02-02 
               1  1     2006-06-02 
               1  0     2006-08-02 
               1  2     2007-12-01
               2  0     2003-01-01 
               2  1     2003-02-02 
               2  3     2003-06-02 
               2  0     2003-08-02 
               2  8     2007-12-01 
               3  1     2007-04-20 
               ",stringsAsFactors=FALSE)

1 Ответ

0 голосов
/ 13 декабря 2018

С dplyr вы можете group_by ID, arrange на date и выбирать строки перед Med == 1

library(dplyr)

df %>%
   group_by(ID) %>%
   arrange(date) %>%
   filter(cumsum(Med == 1) == 0 & Med == 0)


#     ID   Med date      
#  <int> <int> <chr>     
#1     1     0 2006-01-01
#2     1     0 2006-02-02
#3     2     0 2003-01-01
...