如何在读取目录下所有CSV文件时添加文件名列?
解决方案
你可以在读取每个CSV文件后,为其新增一列存储文件名,再进行合并。这里提供两种实现方式:
方式一:使用tidyverse工具(推荐)
利用dplyr::mutate直接添加列,代码更简洁:
library(readr) library(dplyr) # 仅读取目录下的CSV文件(可选但推荐) nm <- list.files(pattern = "\\.csv$") df <- do.call(rbind, lapply(nm, function(x) { read_delim(x, ';', col_names = TRUE) %>% mutate(source_file = x) # 新增列存储当前文件名 }))
方式二:Base R实现
如果不想依赖dplyr,用基础R语法也能完成:
library(readr) nm <- list.files(pattern = "\\.csv$") df <- do.call(rbind, lapply(nm, function(x) { temp_df <- read_delim(x, ';', col_names = TRUE) temp_df$source_file <- x # 新增列 temp_df }))
关键说明
list.files(pattern = "\\.csv$"):过滤出目录下所有CSV文件,避免读取无关文件(比如R脚本、文本文件等),如果你的目录里只有CSV文件,这一步可以省略。- 新增的
source_file列会保留每个行对应的原始文件名,方便后续溯源。
内容的提问来源于stack exchange,提问作者GitZine
相关产品推荐
相关产品推荐

