Одним из методов является вычисление разницы во времени между событиями заражения (event_diff
).Тогда incident
будет, когда эта разница больше 2 лет или разница 0 (при условии, что в одну и ту же дату не было проведено несколько испытаний).Глядя на это сейчас, я подозреваю, что есть лучшие альтернативные решения для этого.
df <- data.frame(
patient_id = c(1,1,1,1,1,1,2,2,2,2),
infection = c("no", "yes", "yes", "no", "yes", "yes", "yes", "no", "no", "yes"),
date = c("2005-02-22", "2005-04-26", "2005-05-06", "2006-05-22", "2007-08-19", "2007-12-15", "2005-10-24", "2005-11-11", "2006-07-12", "2007-12-01")
)
df$date <- as.Date(df$date, "%Y-%m-%d")
library(dplyr)
df %>%
group_by(patient_id, infection) %>%
mutate(event_diff = coalesce(date - lag(date), 0)) %>%
mutate(incident = ifelse(infection == "yes" & (event_diff == 0 | event_diff > (365*2)), "yes", "no"))
patient_id infection date event_diff incident
<dbl> <fct> <date> <drtn> <chr>
1 1 no 2005-02-22 0 days no
2 1 yes 2005-04-26 0 days yes
3 1 yes 2005-05-06 10 days no
4 1 no 2006-05-22 454 days no
5 1 yes 2007-08-19 835 days yes
6 1 yes 2007-12-15 118 days no
7 2 yes 2005-10-24 0 days yes
8 2 no 2005-11-11 0 days no
9 2 no 2006-07-12 243 days no
10 2 yes 2007-12-01 768 days yes