如何用循环批量给MSEL数据集添加标识列并合并
批量合并MSEL数据集的简化方案
方案1:基础for循环实现
先加载所需工具包,再按以下流程处理:
# 加载必要包 library(readr) library(dplyr) # 获取所有符合命名规则的CSV文件路径 file_list <- list.files(pattern = "^msel.*\\.csv$") # 仅匹配msel开头的CSV文件 # 初始化空列表存储处理后的数据集 data_list <- list() # 遍历每个文件进行处理 for (file in file_list) { # 读取当前文件数据 df <- read_csv(file) # 剥离文件名后缀,提取核心名称 core_name <- gsub("\\.csv$", "", file) # 分割核心名称获取subsc和period值 split_parts <- strsplit(core_name, "_")[[1]] subsc_val <- split_parts[1] period_val <- split_parts[2] # 添加标识列 df <- df %>% mutate(subsc = subsc_val, period = period_val) # 将处理好的数据存入列表 data_list[[file]] <- df } # 合并所有数据集 msel_all <- bind_rows(data_list)
方案2:tidyverse管道式实现(更简洁高效)
如果熟悉tidyverse生态,用purrr的映射函数可以一步完成遍历与合并,代码更紧凑:
library(tidyverse) # 批量读取、处理并合并所有数据 msel_all <- list.files(pattern = "^msel.*\\.csv$") %>% map_df(function(file) { read_csv(file) %>% mutate( # 提取subsc:移除文件名中"_"及之后的所有内容(含后缀) subsc = str_remove(file, "_.*\\.csv$"), # 提取period:提取"_"之后、".csv"之前的内容 period = str_extract(file, "(?<=_).*(?=\\.csv$)") ) })
关键细节说明
list.files(pattern = "^msel.*\\.csv$"):精准筛选目标文件,避免读取无关数据- 正则表达式提取逻辑:
str_remove(file, "_.*\\.csv$"):直接剥离文件名中_及后续内容,得到完整分量表标识(如mselcomp)str_extract(file, "(?<=_).*(?=\\.csv$)"):通过正向断言提取阶段标识(如t1、yr2)
- 两种方案最终都会生成包含所有样本、且带有
subsc(分量表)和period(发展阶段)标识列的合并数据集msel_all
内容的提问来源于stack exchange,提问作者AmandaG
相关产品推荐
相关产品推荐

