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

如何使用R合并列名不同但格式统一的多份CSV文件为规范数据集

R实现不同列名CSV文件统一合并方案

需求说明

需要将指定文件夹下的所有CSV文件合并为一份通用CSV文件:

  • 所有源文件均只有2列,第一列为编码,第二列为描述
  • 不同源文件的两列列名不统一
  • 最终输出需要使用统一规范列名,同时保留原始文件的列名信息

参考信息

文件夹操作参考代码

setwd("folder location")
file1 <- read.csv("file1.csv")
file2 <- read.csv("file2.csv")

可复现测试样例数据

file1 <- read.table(header=TRUE, text="
                   A_code    A_desc 
                   n    15-24 
                   n    15-24
                   n    15-24
                   t    25-34 
                   p    35-44 
                   k    65-74
                   l    45-54
                   ")
file1
  A_code A_desc
1      n  15-24
2      n  15-24
3      n  15-24
4      t  25-34
5      p  35-44
6      k  35-44
7      l  45-54

file2 <- read.table(header=TRUE, text="
                   M_code    M_desc 
                   p    new 
                   p    new
                   p    new
                   a    old 
                   b    medium 
                   b    medium 
                   ")

file2
  M_code M_desc
1      p    new
2      p    new
3      p    new
4      a    old
5      b medium
6      b medium

期望输出结构

Gen_code Gen_Desc Ori_code Ori_desc
1         n    15-24   A_code   A_desc
2         n    15-24   A_code   A_desc
3         n    15-24   A_code   A_desc
4         t    25-34   A_code   A_desc
5         p    35-44   A_code   A_desc
6         k    65-74   A_code   A_desc
7         l    45-54   A_code   A_desc
8         p      new   M_code   M_desc
9         p      new   M_code   M_desc
10        p      new   M_code   M_desc
11        a      old   M_code   M_desc
12        b   medium   M_code   M_desc
13        b   medium   M_code   M_desc

已尝试错误代码

原有代码未做列名统一转换,也没有新增原始列名字段,运行结果不符合预期:

path="folder location"
directory() %>%
  filter(endsWith(path, ".csv")) %>%
  select(path) %>% 
  mutate(data = purrr::map(path, read_csv)) %>%
  unnest()

正确实现代码

# 加载依赖包
library(tidyverse)

# 配置目标文件夹路径
target_path <- "folder location"

# 合并逻辑
final_merged_data <- list.files(path = target_path, pattern = "\\.csv$", full.names = TRUE) %>%
  tibble(file_path = .) %>%
  mutate(data = purrr::map(file_path, function(curr_file) {
    # 读取当前CSV文件
    curr_df <- read_csv(curr_file, show_col_types = FALSE)
    # 提取当前文件的原生列名
    original_cols <- colnames(curr_df)
    # 重命名为统一列名,同时新增原始列名字段
    curr_df %>%
      rename(Gen_code = all_of(original_cols[1]), Gen_Desc = all_of(original_cols[2])) %>%
      mutate(Ori_code = original_cols[1], Ori_desc = original_cols[2])
  })) %>%
  unnest(cols = data) %>%
  # 按要求调整字段顺序
  select(Gen_code, Gen_Desc, Ori_code, Ori_desc)

# 导出合并结果为CSV
write_csv(final_merged_data, "merged_unified.csv")

代码说明

  • 自动匹配目标文件夹下所有csv格式文件,无需手动逐个指定
  • 遍历读取文件时自动适配不同的原始列名,按第一列为编码、第二列为描述的规则做统一转换
  • 新增Ori_code和Ori_desc字段存储对应文件的原始列名,完全匹配期望的输出结构
  • 最终结果可直接导出为标准CSV文件使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 07:15:03