查找两个时间间隔之间的时间间隔差,按列分组

时间:2018-11-24 00:45:47

标签: duplicates grouping difftime

我正在尝试计算两行(cohort $ Pharm_FillDate)之间的时间差,前提是且仅当它们在其他两列(cohort $ Pharm_FillDate和cohort $ DrugName)内重复时,才按第三行(cohort $ PatientID)分组),并且有多个(> 10k)组合。我已经尝试了多个线程(关闭,但给出的2个定义的组只能按How can I find the first and last occurrences of an element in a 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() )尚未成功),或通过多个患者ID进行工作,然后我被卡住了。

此外,将数据集重新格式化为更大的宽度将无法正常工作,因为我还有许多其他变量对此无法很好地起作用。

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

非常感谢-

0 个答案:

没有答案