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

如何在R中将文件名设为列标题并合并无表头CSV文件?

合并无表头CSV并以文件名作为列标题的解决方案

问题背景

现有一批无列标题的CSV文件,所有文件第一列内容完全一致,第二列为各文件独有数据。需要将这些文件合并为单个文件,要求:

  • 第一列命名为Wavelength
  • 其余列以对应CSV文件的文件名(不含扩展名)作为列标题

之前代码的问题

之前尝试的两段代码存在以下问题:

  • 读取CSV时默认将第一行识别为表头,导致原始数据丢失一行,后续合并时行数无法对齐
  • 生成的文件包含行号列,再次导入时被误当作数据处理

解决方案(Tidyverse 版本)

步骤1:加载依赖包

library(tidyverse)
library(tools)

步骤2:批量处理并合并文件

# 设置CSV文件所在路径
csv_path <- "C:/"

# 获取所有CSV文件的完整路径
csv_files <- list.files(path = csv_path, pattern = "\\.csv$", full.names = TRUE)

# 批量读取文件,提取第二列并重命名为对应文件名
processed_data <- map(csv_files, function(file) {
  # 读取文件,强制不识别表头
  raw_df <- read_csv(file, header = FALSE)
  # 提取第二列,用文件名(不含扩展名)作为列名
  col_name <- file_path_sans_ext(basename(file))
  raw_df %>% select(V2) %>% rename(!!col_name := V2)
})

# 提取第一个文件的第一列作为波长列(所有文件第一列一致)
wavelength_col <- read_csv(csv_files[1], header = FALSE) %>% 
  select(V1) %>% 
  rename(Wavelength = V1)

# 合并所有列得到最终结果
final_result <- bind_cols(wavelength_col, processed_data)

步骤3:导出合并后的文件

write_csv(final_result, file.path(csv_path, "merged_data.csv"), na = "")

备选方案(Base R 版本)

如果不想使用tidyverse包,可使用Base R实现:

# 设置路径
csv_path <- "C:/"
csv_files <- list.files(path = csv_path, pattern = "\\.csv$", full.names = TRUE)

# 读取第一个文件的第一列作为波长列
wavelength <- read.csv(csv_files[1], header = FALSE)[, 1]
final_result <- data.frame(Wavelength = wavelength)

# 循环处理每个文件,添加第二列到结果中
for (file in csv_files) {
  col_name <- tools::file_path_sans_ext(basename(file))
  # 读取第二列数据
  col_data <- read.csv(file, header = FALSE)[, 2]
  final_result[[col_name]] <- col_data
}

# 导出文件,不生成行号
write.csv(final_result, file.path(csv_path, "merged_data_baseR.csv"), row.names = FALSE)

关键注意事项

  • 所有CSV文件的第一列必须完全一致,否则合并后数据会错位
  • 使用header = FALSE参数强制不将第一行识别为表头,保留所有原始数据
  • 导出时设置row.names = FALSE(Base R)或默认参数(tidyverse),避免生成多余的行号列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:47:01