У меня есть набор данных из 20000 индивидуальных случаев, каждый с датой начала заболевания («дата начала»). Каждый больной проживает в групповом доме, и я хочу сгруппировать случаи по дате начала заболевания в доме.
Итак, я хочу идентифицировать первый случай, который появился в доме. Если в течение 14 дней после первого появятся другие дела, я хочу добавить их в тот же кластер. Если в течение 14 дней появился другой случай из любого другого случая в кластере, я хочу добавить его в тот же кластер. Я бы прекратил добавлять дела в кластер, как только другой случай будет более чем через 14 дней после последнего; в этот момент образуется новый кластер, и процесс перезапускается, пока все не будут отсортированы. «Дата начала» кластера будет датой начала заболевания для первого случая, добавленного в кластер, а конечной датой будет 14 дней после того, как последний случай был добавлен в кластер.
Вот фиктивные данные:
dummy <- data.frame(case = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19),
onsetdate = as.Date(c("2012-08-30", "2012-09-03", "2012-09-09", "2012-09-17", "2012-11-01", "2012-11-05", "2012-11-30", "2012-08-30", "2012-09-03", "2012-10-09", "2012-10-17", "2012-10-30", "2020-12-26", "2020-12-23", "2020-12-30", "2020-12-25", "2021-04-22", "2021-05-03", "2021-05-10")),
position = c("Resident", "Staff", "Resident", "Staff", "Staff", "Resident", "Resident", "Staff", "Resident", "Staff", "Staff", "Resident", "Resident", "Resident", "Staff", "Resident", "Staff", "Staff", "Resident") ,
grouphome = c("Group Home 1", "Group Home 1","Group Home 1","Group Home 1","Group Home 1","Group Home 1","Group Home 1","Group Home 1","Group Home 2","Group Home 2","Group Home 2","Group Home 2", "Group Home 3", "Group Home 3","Group Home 3","Group Home 3","Group Home 3","Group Home 3","Group Home 3")
)
И результат будет выглядеть так:
result <- data.frame(grouphome = c("Group Home 1", "Group Home 1","Group Home 1","Group Home 2","Group Home 2", "Group Home 3", "Group Home 3"),
clusterNumber = c("1", "2", "3", "1", "2", "1", "2"),
clusterStart = as.Date(c("2012-08-30", "2012-11-01", "2012-11-30", "2012-09-03", "2012-10-09", "2020-12-23", "2021-04-22")),
cases = c("5", "2", "1", "1", "3", "4", "3"))
Огромное спасибо заранее