在R中如何导入多文件并依据文件名部分字段合并计算均值
R数据处理问题解决方案
1 批量导入多个.xlsx或.DAT格式文件
首先加载所需的文件读取和数据处理包:
# 首次使用先安装依赖包 install.packages(c("readxl", "tidyverse")) # 加载包 library(readxl) library(tidyverse)
1.1 批量导入.xlsx文件
# 替换为你的文件存储文件夹路径 file_dir <- "C:/your_file_path" # 提取路径下所有.xlsx格式文件(忽略大小写,也可匹配.XLSX后缀) xlsx_files <- list.files( path = file_dir, pattern = "\\.xlsx$", full.names = TRUE, ignore.case = TRUE ) # 批量读取文件,同时新增列存储原始文件名用于后续匹配 xlsx_list <- lapply(xlsx_files, function(path) { df <- read_excel(path, sheet = 1) # 如需读取指定工作表可调整sheet参数 df$raw_file_name <- basename(path) return(df) }) # 可选操作:将所有文件合并为一个总数据框 all_xlsx <- bind_rows(xlsx_list)
1.2 批量导入.DAT文件
.DAT一般为文本格式的分隔符文件,请根据你的实际文件格式调整read.table的header、sep、encoding等参数:
# 提取路径下所有.DAT格式文件 dat_files <- list.files( path = file_dir, pattern = "\\.DAT$", full.names = TRUE, ignore.case = TRUE ) # 批量读取文件 dat_list <- lapply(dat_files, function(path) { # sep = "" 代表匹配任意空白分隔符,逗号分隔可改为sep = ",", 制表符分隔改为sep = "\t" df <- read.table(path, header = TRUE, sep = "", fill = TRUE, encoding = "UTF-8") df$raw_file_name <- basename(path) return(df) }) # 可选操作:合并为总数据框 all_dat <- bind_rows(dat_list)
2 依据文件名部分字段合并文件并计算指定变量均值
你给出的文件名规则为[受试者ID]_[随访周期]_[重复序号]_[其他后缀],可先从文件名中拆分出关键字段,再按字段分组合并计算均值,完整流程如下:
# 此处以导入的xlsx总数据为例,如使用DAT数据替换为all_dat即可 processed_df <- all_xlsx %>% # 去除文件名后缀 mutate(file_name_no_suffix = str_remove(raw_file_name, "\\.(xlsx|XLSX|DAT|dat)$"), # 按下划线拆分,提取第1位为受试者ID,第2位为随访周期 subject_id = str_split_i(file_name_no_suffix, "_", 1), follow_cycle = str_split_i(file_name_no_suffix, "_", 2)) # 按ID和随访周期分组,计算目标变量的均值 stat_result <- processed_df %>% group_by(subject_id, follow_cycle) %>% # 替换target_var为你需要计算均值的实际变量名,na.rm = TRUE代表忽略缺失值 summarise(target_var_mean = mean(target_var, na.rm = TRUE), .groups = "drop") # 输出计算结果 print(stat_result)
补充说明
- 如需要保留合并后的所有原始观测,可将
summarise替换为mutate,会在原数据基础上新增均值列,不会压缩行数 - 如文件名分隔符不是下划线,调整
str_split_i的第二个参数为对应的分隔符即可
内容的提问来源于stack exchange,提问作者EI_Stats
相关产品推荐
相关产品推荐

