【发布时间】:2026-01-13 23:20:02
【问题描述】:
我有两个数据框,一个是住院时间,另一个是实验室结果。我需要确定实验室结果发生在哪个医院,并将医院数据框中的入院和出院日期复制到相关实验室结果的行中。
我使用 for 循环来遍历实验室结果,然后在医院记录中查找匹配条目(按患者 SSN 和周围日期)的 if 语句和子集。
这是一个相当大的数据集,使用 for 循环非常慢。有没有办法加快这种问题? (我有几个类似的问题,所以很想得到一个答案。)
添加了示例数据,请注意,每位患者都有多个医院记录,目的是从日期与实验室日期重叠的记录中获取日期。在此示例中,生成的数据框应仅包含患者 1 的入院和出院日期,因为患者 2 没有医院数据,并且患者 3 的记录不与实验室日期重叠。
testDate <- as.Date(c("2017-01-15", "2017-01-15", "2017-01-15"))
patientSSN <- c("1","2","3")
labs <- data.frame(patientSSN, testDate)
# patientSSN testDate
# 1 1 2017-01-15
# 2 2 2017-01-15
# 3 3 2017-01-15
patientSSN <- c("1","1","3","3")
admissionDate <- as.Date(c("2017-01-07", "2017-02-01", "2016-12-01", "2017-01-16"))
dischargeDate <- as.Date(c("2017-01-16", "2017-02-10", "2016-12-15", "2017-02-01"))
hospitalRec <- data.frame(patientSSN, admissionDate, dischargeDate)
for (I in 1:nrow(labs)) {
labs[I,]$admissionDate <- hospitalRec[hospitalRec$patientSSN == labs[I,]$patientSSN & hospitalRec$admissionDate <= labs[I,]$testDate & hospitalRec$dischargeDate >= labs[I,]$testDate,]$admissionDate
labs[I,]$admissionDate <- hospitalRec[hospitalRec$PatientSSN == labs[I,]$PatientSSN & hospitalRec$admissionDate <= labs[I,]$testDate & hospitalRec$dischargeDate >= labs[I,]$testDate,]$dischargeDate
}
所需的数据框如下所示:
labs:
patientSSN testDate admissionDate dischargeDate
1 2017-01-15 2017-01-07 2017-01-16
2 2017-01-15 NA NA
3 2017-01-15 NA NA
注意,在真实数据中,还存在多个医院记录合格(部门之间的出院)的问题,这些记录的入院日期相同,但出院时间不同,最重要的是最新的出院时间。但首先要做的就是……
【问题讨论】:
-
能否请您显示示例数据,以及预期的输出?它将帮助其他人正确地帮助您。
-
尝试使用
dplyr的join函数合并两个数据帧。如果您重现示例数据,我们可以提供帮助。 -
提供的样本数据。合并不起作用,因为它无法识别日期问题。
标签: r