You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dplyr连接多张表:医疗患者BCR_ABL监测数据处理

使用dplyr连接多张医疗患者监测数据表的方法

场景说明

你提到的是单例患者(ID: Hospital1_124)的BCR_ABL随时间变化监测数据,实际医疗数据处理中,我们通常会关联多张表(比如患者基础信息表、检测实验室信息表等)来整合完整的诊疗视角。下面我结合这个示例场景,一步步演示用dplyr做表连接的常用操作。

先准备示例关联表

假设我们有三张核心表,先模拟生成符合逻辑的示例数据:

library(dplyr)

# 1. 患者基础信息表:存储患者核心身份信息
patient_info <- tibble(
  PatientId = c("Hospital1_124"),
  PatientName = c("John Doe"),
  AdmissionDate = c("2007-10-05")
)

# 2. BCR_ABL检测数据表:你提供的单例患者时间序列数据(补全模拟数值)
bcr_abl_data <- tibble(
  PatientId = c("Hospital1_124", "Hospital1_124", "Hospital1_124", "Hospital1_124", "Hospital1_124", "Hospital1_124", "Hospital1_124"),
  TestDate = c("2007-11-13", "2008-09-01", "2011-02-24", "2013-05-01", "2016-02-16", "2017-05-12", "2017-08-29"),
  BCR_ABL = c(0.8, 0.3, 0.1, 0.05, 0.02, 0.01, 0.005)
)

# 3. 检测实验室信息表:存储每次检测的实验室归属
lab_info <- tibble(
  TestDate = c("2007-11-13", "2008-09-01", "2011-02-24", "2013-05-01", "2016-02-16", "2017-05-12", "2017-08-29"),
  LabId = c("Lab001", "Lab001", "Lab002", "Lab002", "Lab003", "Lab003", "Lab003"),
  LabName = c("Central Hospital Lab", "Central Hospital Lab", "City Diagnostic Center", "City Diagnostic Center", "Regional Reference Lab", "Regional Reference Lab", "Regional Reference Lab")
)

常用的dplyr表连接操作

1. 内连接(Inner Join)

只保留所有表中匹配的记录,适合获取"患者-检测-实验室"三者完全对应的有效数据:

# 先关联患者信息和检测数据,再关联实验室信息
inner_joined_data <- patient_info %>%
  inner_join(bcr_abl_data, by = "PatientId") %>%
  inner_join(lab_info, by = "TestDate")

2. 左连接(Left Join)

保留左表的所有记录,匹配右表的对应数据,适合确保不丢失患者的任何检测记录(即使某些检测没有关联实验室数据):

# 以检测数据表为核心,关联患者和实验室信息
left_joined_data <- bcr_abl_data %>%
  left_join(patient_info, by = "PatientId") %>%
  left_join(lab_info, by = "TestDate")

3. 全连接(Full Join)

保留所有表的所有记录,适合整合所有可能的数据(比如存在患者没有检测记录、或者检测记录没有对应患者的情况):

full_joined_data <- patient_info %>%
  full_join(bcr_abl_data, by = "PatientId") %>%
  full_join(lab_info, by = "TestDate")

针对时间序列监测数据的额外处理

连接完成后,还可以针对BCR_ABL的时间特性做进一步分析,比如排序、计算变化趋势:

# 转换日期格式并排序,计算BCR_ABL的变化率
analyzed_data <- left_joined_data %>%
  mutate(TestDate = as.Date(TestDate),
         AdmissionDate = as.Date(AdmissionDate)) %>%
  arrange(TestDate) %>%
  mutate(BCR_ABL_Delta = BCR_ABL - lag(BCR_ABL),
         BCR_ABL_Pct_Change = (BCR_ABL_Delta / lag(BCR_ABL)) * 100)

关键注意事项

  • 确保连接键(比如PatientId、TestDate)的数据类型一致:比如日期字段一定要统一转换为Date类型,避免因字符串格式差异导致匹配失败。
  • 如果存在重复的连接键记录,先通过distinct()去重,或者明确连接逻辑,避免生成冗余数据行。

内容的提问来源于stack exchange,提问作者Dhiraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:06:34