Мне нужно создать функцию (или цикл) в R для обнаружения гипер-частых.Требование выявлять гипер-частоту - приходить 3 раза за 180 дней, если это требование выполнено, человек будет гипер-частым не только в будущем, но и в прошлых посещениях, когда он не удовлетворял гипер-частому требованию.а также.
pacient <- c(10,10,10,10,10,11,11,12,12,12,13, 13, 15, 14); pacient
date <- as.Date(c("01/01/2018","02/05/2018", "04/06/2018", "10/11/2018", "05/12/2018", "02/01/2018", "06/08/2018", "01/01/2018", "03/01/2018", "06/03/2018", "05/08/2018", "05/08/2019", "05/07/2019", "08/07/2017"), format = "%d/%m/%Y"); date
DF <- data.frame(pacient, date); DF
count_visit <- function(x){
DF <- data.table(DF)
DTord<-DF[with(DF , order(DF $ date)), ]; DTord
DTord[,num_visit := order(date), by = pacient];DTord
DTordID <- DTord[with(DTord, order(DTord$pacient)), ]; DTordID
DTordID[,max_visit := max(num_visit), by = pacient];DTordID
framedatos <- as.data.frame(DTordID)
return(framedatos)}
REUP_visit <- count_visit(DF); head(REUP_visit)
pacient date num_visit max_visit
10 01/01/2018 1 5
10 02/05/2018 2 5
10 04/06/2018 3 5
10 10/11/2018 4 5
10 05/12/2018 5 5
11 02/01/2018 1 2
11 06/08/2018 2 2
12 01/01/2018 1 3
12 03/01/2018 2 3
12 06/03/2018 3 3
13 05/08/2018 1 2
13 05/08/2019 2 2
14 08/07/2017 1 1
15 05/07/2019 1 1
До сих пор мне только удалось создать функцию, которая сообщает мне количество посещений на пациента и максимальное количество посещений, которые имел пациент (это то, что мне нужно для чего-то другого):
pacient date num_visit max_visit days_visit <180 future_hyperf past_hyperf
10 01/01/2018 1 5 0 1 no yes
10 02/05/2018 2 5 121 2 no yes
10 04/06/2018 3 5 33 3 yes yes
10 10/11/2018 4 5 159 4 yes yes
10 05/12/2018 5 5 25 5 yes yes
11 02/01/2018 1 2 0 1 no no
11 06/08/2018 2 2 216 1 no no
12 01/01/2018 1 3 0 1 no yes
12 03/01/2018 2 3 2 2 no yes
12 06/03/2018 3 3 62 3 yes yes
13 05/08/2018 1 2 0 1 no no
13 05/08/2019 2 2 365 1 no no
14 08/07/2017 1 1 0 1 no no
15 05/07/2019 1 1 0 1 no no
Мне нужен вывод, который имеет: "day_visit", "<180", "future_hyperf" и "past_hyperf". </p>
Цель переменной "day_visit"«означает нумерацию первого визита пациента в отделение неотложной помощи в 0, а затем подсчитывает дни между посещениями.
DF <- DF %>%
group_by(pacient) %>%
arrange(date) %>%
mutate(days_visit= date - lag(date, default = first(date)))
Переменная« <180 »будет той переменной, которая равна 1 при первом посещении,2 второй (если с предыдущего визита <180 дней), 3 (если с предыдущего визита <180 дней) и т. Д.Если, например, пациент достигает 2, а третье посещение не соответствует <180 дням, необходимо будет снова ввести 1 (цикл будет перезапущен). </p>
В переменной "future_hyperf" указано yes илинет.Он отмечен так, как будто он сделал будущее, когда пациент достигнет 3 в переменной <180, не имеет значения, если визиты были позже, чем 180 дней и не соответствует.Как только критерий удовлетворен, он становится навсегда. </p>
Переменная "past_hyperf" преобразует всех пациентов, у которых есть в переменной "future_hyperf", также в прошлое.
Спасибо!
РЕШЕНИЕ
DF3 <- DF %>%
arrange(pacient, date) %>%
group_by(pacient) %>%
mutate(days_visit = as.integer(date - lag(date, default = first(date))) ,
less_180 = days_visit < 180) %>%
mutate(counter = rowid(pacient, cumsum(date - shift(date, fill=first(date)) > 180)),
future_hyperf = case_when(counter >= 3 ~ "yes",
TRUE ~ "no"),
past_hyperf = case_when(max(counter, na.rm = T) >= 3 ~ "yes",
TRUE ~ "no"))
DF3 <- DF3[with(DF3,order(pacient,date)),]