如何检查两个DataFrame的患者ID互存性并同步更新数据集
检查并对齐两个DataFrame中的患者数据
一、检查患者存在性
两个数据集的关联键分别是wd_patients$ID(患者唯一标识)和wd_appointments$patientID(预约关联的患者ID),可通过以下方法双向验证存在性:
1. 检查wd_patients中的患者是否都在wd_appointments中
找出患者表有但预约表无的患者:
library(tidyverse) # 用anti_join筛选仅在患者表存在的记录 patients_missing_in_appts <- anti_join(wd_patients, wd_appointments, by = c("ID" = "patientID")) # 查看缺失数量与具体ID cat("患者表中无预约记录的患者数:", nrow(patients_missing_in_appts), "\n") patients_missing_in_appts$ID
2. 检查wd_appointments中的患者是否都在wd_patients中
预约表可能存在重复患者ID,需先提取唯一ID再验证:
# 筛选仅在预约表存在的记录 appts_missing_in_patients <- anti_join(wd_appointments, wd_patients, by = c("patientID" = "ID")) # 查看独有的患者ID数量与具体值 cat("预约表中无患者档案的唯一患者数:", length(unique(appts_missing_in_patients$patientID)), "\n") unique(appts_missing_in_patients$patientID)
简洁的集合对比
直接用setdiff对比ID集合:
# 患者表独有的ID setdiff(wd_patients$ID, wd_appointments$patientID) # 预约表独有的ID setdiff(wd_appointments$patientID, wd_patients$ID)
二、同步两个数据集的患者
根据业务需求选择两种同步方式:
方式1:补全缺失患者(保留所有患者,缺失字段填NA)
让两个数据集包含全部存在的患者,缺失的属性/预约记录用NA填充:
更新wd_patients,加入预约表中的新患者
# 生成预约表独有的患者的档案记录(缺失字段按业务规则填充) new_patient_records <- tibble( ID = unique(appts_missing_in_patients$patientID), Age = NA_real_, Gender = NA_character_, AppointmentCount = 0, # 也可改为NA,依业务需求调整 TreatmentCompleted = NA_character_ ) # 合并到原患者表 wd_patients_updated <- bind_rows(wd_patients, new_patient_records)
更新wd_appointments,加入患者表的空预约记录
# 生成患者表独有的患者的空预约记录 new_appt_records <- tibble( patientID = patients_missing_in_appts$ID, apptDate = NA_POSIXct_, apptStatus = NA_character_ ) # 合并到原预约表 wd_appointments_updated <- bind_rows(wd_appointments, new_appt_records)
方式2:只保留双方共有的患者
若仅需保留两个表都存在的患者,用semi_join过滤:
# 过滤患者表:仅保留有预约记录的患者 wd_patients_filtered <- semi_join(wd_patients, wd_appointments, by = c("ID" = "patientID")) # 过滤预约表:仅保留有患者档案的预约记录 wd_appointments_filtered <- semi_join(wd_appointments, wd_patients, by = c("patientID" = "ID"))
内容的提问来源于stack exchange,提问作者SpartanHoplite
相关产品推荐
相关产品推荐

