Найти разницу во времени между двумя интервалами, сгруппированные по столбцу - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь измерить разницу во времени между двумя строками (когорта $ 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

Большое спасибо -

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...