我正在尝试计算两行(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
非常感谢-