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

R导入多来源患者CSV文件 匹配添加对应patient_id的实现问题

问题根因

你当前的代码存在三个核心问题:

  1. 自定义的read_in函数中使用了未定义的变量id,同时设置了默认patient_id = 1,导致所有读取的数据都默认填充了id为1
  2. 未建立CSV文件名和patient_names表中患者id的映射关系,调用map_df时仅传入了文件路径,函数无法匹配每个文件对应的患者id
  3. 函数直接调用全局环境的patient_names对象,存在作用域风险

实现方案

步骤1:加载依赖包

library(tidyverse)

步骤2:生成文件路径与患者id的映射关系

# 读取目录下所有csv文件的全路径
file_paths <- list.files(path = "/directory", pattern = "\\.csv$", full.names = TRUE)
# 提取不带路径和后缀的文件名核心(如LebronJames.csv提取为LebronJames)
file_core_names <- str_remove(basename(file_paths), "\\.csv$")

# 处理患者映射表,生成无空格的姓名键用于匹配文件名
patient_names <- patient_names %>%
  mutate(name_key = str_remove_all(patient_name, "\\s"))

# 为每个文件匹配对应的patient_id
matched_patient_ids <- map_int(file_core_names, ~patient_names$patient_id[patient_names$name_key == .x])

步骤3:重写读取函数

read_in <- function(path, patient_id){
  data <- read_delim(path, delim = ";", col_names = TRUE)
  # 将对应patient_id插入到第一列
  data <- add_column(data, patient_id = patient_id, .before = 1)
  return(data)
}

步骤4:迭代读取并合并所有数据

final_merged_data <- map2_df(.x = file_paths, .y = matched_patient_ids, .f = read_in)

运行后得到的final_merged_data就是包含所有患者数据和对应patient_id的合并数据框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 12:15:03