R语言如何基于日期范围对两个DataFrame实现关联匹配
问题原因
- 缺少ID关联条件:原代码的JOIN没有限制两个表ID相等,会出现跨ID的错误匹配
- 区间匹配逻辑写反:你需要的是
OUT的完整区间落在HOSP的区间内,原代码的判断逻辑是HOSP的入院开始时间落在OUT的区间内,和需求完全相反
解决方案
方案1:修正sqldf语句
直接修正SQL的关联条件即可得到符合预期的结果:
library(sqldf) RESULT <- sqldf("select HOSP.*, OUT.DT_START_OUT, OUT.DT_END_OUT from HOSP left join OUT on HOSP.ID = OUT.ID and OUT.DT_START_OUT >= HOSP.DT_START_HOSP and OUT.DT_END_OUT <= HOSP.DT_END_HOSP")
方案2:tidyverse生态实现
如果你习惯用dplyr语法,可以用如下写法实现相同逻辑:
library(dplyr) RESULT <- HOSP %>% left_join(OUT, by = "ID") %>% filter( (DT_START_OUT >= DT_START_HOSP & DT_END_OUT <= DT_END_HOSP) | is.na(DT_START_OUT) )
内容的提问来源于stack exchange,提问作者Bruno Avila
相关产品推荐
相关产品推荐

