R语言如何批量合并多数据集并为列添加来源后缀
R语言批量合并100个结构相同数据集为宽表实现方案
以下方案全程采用批量列表操作,不需要手动处理单个数据集,运行效率高,适配百万行级别的大数据量场景。
步骤1:批量收集所有数据集到列表
不要逐个手动调用数据集,先把所有分散的数据集统一加载到列表对象里,方便后续批量处理:
# 生成所有数据集对应的对象名,匹配当前命名规则:第一个为data,后续为data2~data100 df_obj_names <- c("data", paste0("data", 2:100)) # 批量从全局环境读取所有数据集到列表 df_list <- mget(df_obj_names, envir = .GlobalEnv) # 给列表元素统一命名为data1~data100,和后缀标识对应 names(df_list) <- paste0("data", 1:100)
如果数据集是存在本地文件夹里的csv/rds文件,把上面读取部分替换成批量读文件的代码即可,后续逻辑完全通用。
步骤2:批量给列添加数据集标识后缀
遍历列表里的每个数据集,给id和iq两列加上对应后缀,完全匹配要求的列名格式:
df_list <- lapply(names(df_list), function(tag){ tmp_df <- df_list[[tag]] # 按列名匹配重命名,不受列顺序影响,避免出错 colnames(tmp_df)[colnames(tmp_df) == "id"] <- paste0("id_", tag) colnames(tmp_df)[colnames(tmp_df) == "iq"] <- paste0("iq_", tag) return(tmp_df) })
步骤3:合并为宽数据集
根据数据特征选对应合并方式即可:
- 场景1:所有数据集行数完全一致、行顺序严格对应(和给出的示例结构一致),用按列拼接的方式,速度最快:
library(dplyr) wide_result <- bind_cols(df_list) # 如果需要严格按照「所有id列在前、所有iq列在后」的格式排列列顺序,执行以下代码调整 final_col_order <- c(paste0("id_data", 1:100), paste0("iq_data", 1:100)) wide_result <- wide_result[, final_col_order]
- 场景2:不同数据集的id顺序可能错乱、存在id缺失,需要按id值匹配避免行错位:这种情况先保留公共id列做匹配合并,最后再重命名列、调整顺序即可,避免数据对应错误。
校验结果
合并完成后可以运行以下代码检查列名是否符合要求:
print(names(wide_result))
内容的提问来源于stack exchange,提问作者yoo
相关产品推荐
相关产品推荐

