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

在R语言中合并多份CSV文件并添加文件名列的技术求助

嘿,你的需求其实很常见,而且你一开始选ldply的思路是对的,只是函数体没写完而已!我来帮你把代码补全,再给你几个更实用的方案~

解决CSV合并并添加文件名列的问题

方法1:补全你正在用的plyr代码

你的脚本里ldply的匿名函数没写完,而且有个关键细节:要把full.names设为TRUE,这样才能拿到文件的完整路径,不然read.csv可能找不到文件(毕竟你的工作目录不一定是CSV文件夹)。修改后的完整代码如下:

library(plyr)

# 获取CSV文件的完整路径(一定要开full.names=TRUE!)
csvfilenames <- list.files("/Users/PAM/Desktop/CSVFilesToMerge/", 
                          pattern="*.csv", 
                          all.files=FALSE, 
                          full.names=TRUE)

# 合并文件并新增文件名列
CombinedData <- ldply(csvfilenames, function(filepath) {
  # 读取当前CSV文件
  data <- read.csv(filepath, stringsAsFactors = FALSE)
  # 提取纯文件名(去掉前面的路径),添加为新列
  data$source_file <- basename(filepath)
  return(data)
})

# 查看合并后的前几行数据
head(CombinedData)

方法2:更现代的tidyverse方案(推荐)

plyr已经停止维护啦,现在更推荐用tidyverse家族的dplyr+purrr组合,代码更简洁,处理大文件也更快:

library(tidyverse)

# 同样先获取完整文件路径
csvfilenames <- list.files("/Users/PAM/Desktop/CSVFilesToMerge/", 
                          pattern="*.csv", 
                          full.names=TRUE)

# 一步完成读取、合并、加文件名列
CombinedData <- csvfilenames %>%
  set_names() %>%  # 用文件名给列表元素命名
  map_dfr(read_csv, .id = "source_file")  # 自动合并,.id直接把列表名转成新列

这里用read_csv代替read.csv,它是readr包的函数,默认支持UTF-8编码,读取速度也比基础函数快很多哦~

方法3:基础R实现(不用装任何包)

如果你不想依赖第三方包,用基础R的循环也能搞定,只是处理大量文件时效率会低一点:

# 获取完整文件路径
csvfilenames <- list.files("/Users/PAM/Desktop/CSVFilesToMerge/", 
                          pattern="*.csv", 
                          full.names=TRUE)

# 初始化空数据框
CombinedData <- data.frame()

# 循环读取每个文件并合并
for (filepath in csvfilenames) {
  data <- read.csv(filepath, stringsAsFactors = FALSE)
  data$source_file <- basename(filepath)
  CombinedData <- rbind(CombinedData, data)
}

# 查看结果
head(CombinedData)

几个要注意的小细节

  • 确保所有CSV文件的列名和列数完全一致,不然合并时会报错;
  • 如果你的CSV是特殊编码(比如中文UTF-8),可以在read.csv里加fileEncoding="UTF-8",或者直接用read_csv(默认支持UTF-8);
  • 可以先打印csvfilenames确认路径是否正确,避免找不到文件的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:22:35