Понятия не имею, почему в ожидаемом результате нет последней строки 645 08-09-2019 0
. Первое появление столбца болезней для идентификатора 645 еще не появилось, поэтому я полагаю, что вы, возможно, пропустили его в ожидаемом результате.
Исходя из моих предположений выше, возможно, вы можете попробовать базовое решение R ниже, используя subset
+ ave
dfout <- subset(df,!!ave(Disease,ID,FUN = function(v) !duplicated(cumsum(v)>0)))
таким, что
> dfout
ID Date Disease
1 123 02-03-2012 0
2 123 03-03-2013 1
4 321 03-03-2015 1
5 423 06-06-2016 1
7 543 08-05-2018 1
9 645 08-09-2019 0
ДАННЫЕ
df <- structure(list(ID = c(123L, 123L, 123L, 321L, 423L, 423L, 543L,
543L, 645L), Date = c("02-03-2012", "03-03-2013", "04-03-2014",
"03-03-2015", "06-06-2016", "07-06-2017", "08-05-2018", "09-06-2019",
"08-09-2019"), Disease = c(0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L
)), class = "data.frame", row.names = c(NA, -9L))