Я пытаюсь измерить разницу во времени между двумя строками (когорта $ Pharm_FillDate), если и только если они являются дубликатами в двух других столбцах (когорта $ Pharm_FillDate и когорта $ DrugName), сгруппированных по третьей (когорта $ PatientID)), и есть несколько (> 10k) комбинаций.Я пробовал несколько потоков (близко, но не совсем верно, учитывая только 2 определенные группы для сортировки по: Как я могу найти первое и последнее вхождения элемента в data.frame? ).
Я пробовал различные варианты dplyr, но я думаю, что я недостаточно поверхностен с перестановками.
Мой фрейм данных (когорта) выглядит следующим образом:
PatientID (factor), DrugName (character string), Pharm_FillDate (YYYY-MM-DD)
<PatientID> <DrugName> <Pharm_FillDate>
A Aspirin 2018-11-01
A Aspirin 2018-11-05
A Ibuprofen 2018-10-10
A Ibuprofen 2018-11-01
A Ibuprofen 2018-11-02
B Metformin 2017-10-01
B Lisinopril 2018-01-01
Я могу успешно получить то, что хочу, если я работаю ТОЛЬКО с одним пациентом, но пытаюсь выяснить, как я могу это сделатьэто для каждого пациента (n = 33 000).
Это пример чего-то, что работает только для одного пациента, но в нескольких случаях дублированных лекарств (например, ибупрофен для пациента A - я хочу зафиксировать разницу во времени между каждым экземпляром - используя что-то вроде tail ()или last () не увенчался успехом), ИЛИ не работал с несколькими идентификаторами пациентов, и я застрял.
Кроме того, переформатирование моего набора данных в столь широкую область не сработало бы, так как у меня есть ряд других переменных, которыене очень хорошо с этим работает.
cohort$Days_Between_Fills<- ifelse(duplicated(cohort$Drug_Name),
as.numeric(paste(
difftime(cohort$Pharm_FillDate[1],
cohort$Pharm_FillDate[2:length(cohort$Pharm_FillDate)])[3])), "")
Желаемый вывод даст что-то вроде этого:
<PatientID> <DrugName> <Pharm_FillDate> <Days_Between_Fills>
A Aspirin 2018-11-01
A Aspirin 2018-11-05 4
A Ibuprofen 2018-10-10
A Ibuprofen 2018-11-01 31
A Ibuprofen 2018-11-02 1
A Advil 2018-09-30
B Metformin 2017-10-01
B Lisinopril 2018-01-01
B Metformin 2017-10-15 14
Большое спасибо -