我正在使用R,我有两个数据集,一个包含参考日期(癌症诊断日期(,另一个包含扫描日期。一些患者在诊断前后进行了多次扫描。我需要在诊断日期后进行第一次扫描。然后,我计划合并数据集,以便我们可以分析数据框中的其他数据(未描述(。
我正在使用润滑剂,整洁和dplyr。
第一个数据集"a1"的结构为:
patient_id diagnosis_date
1 2018-06-26
2 2014-10-15
3 2016-02-19
4 2018-06-30
第二个数据"a2"集的结构:
patient_id mri_date
1 2018-04-19
1 2018-07-12
1 2018-08-11
2 2014-11-01
3 2016-02-25
3 2018-10-07
我想为每个patient_id选择诊断日期mri_date>=diagnosis_date
后的第一次扫描,例如患者 1 mri_date 2018-07-12
。我尝试合并数据集combined<-merge(a1,a2,by="patient_id",all.x=TRUE)
然后计划过滤和切片。但是,这删除了每个患者的多个mri_date值,只取了第一个。
我尝试过寻找答案,但似乎找不到。
我将非常感谢您的帮助。
dplyr
的一种方法是通过"patient_id"
连接a1
和a2
,根据mri_date
arrange
它们并选择mri_date
大于diagnosis_date
的第一行。
library(dplyr)
inner_join(a1, a2, by = 'patient_id') %>%
arrange(patient_id, mri_date) %>%
group_by(patient_id) %>%
slice(which.max(mri_date > diagnosis_date))
# patient_id diagnosis_date mri_date
# <int> <date> <date>
#1 1 2018-06-26 2018-07-12
#2 2 2014-10-15 2014-11-01
#3 3 2016-02-19 2016-02-25
数据
a1 <- structure(list(patient_id = 1:4, diagnosis_date = structure(c(17708,
16358, 16850,17712), class = "Date")), row.names = c(NA, -4L), class = "data.frame")
a2 <- structure(list(patient_id = c(1L, 1L, 1L, 2L, 3L, 3L), mri_date =
structure(c(17640, 17724, 17754, 16375, 16856, 17811), class = "Date")),
row.names = c(NA,-6L), class = "data.frame")