R语言如何批量导入多层子文件夹Excel并添加对应标识列
R语言多层级文件夹批量导入Excel文件实现方案
前置依赖安装加载
使用readxl包读取Excel文件,tidyverse套件做路径处理、批量循环和数据合并,首次运行先执行安装:
# 安装缺失依赖 if (!require("tidyverse")) install.packages("tidyverse") if (!require("readxl")) install.packages("readxl") # 加载包 library(tidyverse) library(readxl)
第一步:提取所有文件路径与标识信息
先递归遍历Data文件夹下所有Excel文件,从路径中直接提取被试ID、测试轮次(Lap)标识,避免后续手动打标签:
# 替换为你本地项目的根目录绝对路径,Windows注意把路径反斜杠改成正斜杠 root_path <- "C:/your_project_path" data_dir <- file.path(root_path, "Data") # 生成文件信息表 file_tb <- tibble( file_path = list.files(data_dir, pattern = "\\.xlsx$", recursive = TRUE, full.names = TRUE) ) %>% mutate( # 提取被试ID:匹配"subj 数字"格式,去掉中间空格得到subj1、subj2格式 `Subject ID` = str_extract(file_path, "subj \\d+") %>% str_remove(" "), # 提取Lap标识:从文件名中匹配T+数字的规则 Lap = str_extract(basename(file_path), "T\\d+") )
执行完建议先运行
View(file_tb)检查结果,确认没有文件遗漏、Subject ID和Lap列没有缺失值,再进行后续导入。
第二步:批量导入并生成带标识的总数据框
遍历文件信息表逐份读取Excel,自动绑定之前提取的两列标识,最终合并为一个完整数据框:
all_data <- file_tb %>% # 逐文件读取,读取时绑定Lap标识 mutate( df = map2(file_path, Lap, ~read_excel(.x) %>% mutate(Lap = .y)) ) %>% # 展开所有数据,自动绑定Subject ID列 unnest(df) %>% # 移除冗余的文件路径列 select(-file_path)
运行完成后all_data就是你需要的、带Subject ID和Lap两列标识的总数据集。
按被试拆分独立数据框
如果需要为每个被试生成单独的数据框,直接按Subject ID拆分即可:
# 拆分得到被试数据框列表,列表名对应被试ID subj_df_list <- all_data %>% group_split(`Subject ID`) %>% set_names(unique(all_data$`Subject ID`)) # 可选:直接将所有被试数据框批量输出到全局环境,直接输入subj1、subj2即可调用对应数据 list2env(subj_df_list, envir = .GlobalEnv)
更推荐保留列表格式存储被试数据,后续做批量统计、建模时可以直接用
map/lapply遍历列表,不需要手动写60次重复代码。
常见问题调整
- 如果文件是
.xls格式,把list.files里的匹配规则改为pattern = "\\.xls$"即可 - 如果Excel列类型识别错误,在
read_excel()内加col_types参数手动指定列格式 - 如果不同Excel文件列名不统一,提前统一列名再合并,否则
unnest时会自动对不匹配的列填充NA - 如果每个Excel包含多个sheet,可在
read_excel内指定sheet序号,或嵌套一层sheet遍历逻辑即可
内容的提问来源于stack exchange,提问作者Virginie
相关产品推荐
相关产品推荐

