如何在R-Markdown中为合并后的数据集添加原始.csv文件标识列?
解决方案
先修正你原代码里的几个小问题:
Sys.glob的括号位置错误,正确写法是Sys.glob("data*.csv")lapply的参数顺序颠倒,需先传入文件名列表,再传读取函数- 变量名大小写不一致(
dataFiles和datafiles),R是大小写敏感语言
下面是添加原始文件来源列的可行实现,核心逻辑是先获取所有匹配的文件名列表,读取每个文件时给数据集新增一列存储当前文件名,最后合并所有数据:
# 设置工作目录(替换为你的实际路径) setwd("your_target_directory") # 获取所有匹配"data*.csv"的文件名列表 file_list <- Sys.glob("data*.csv") # 遍历读取每个文件,同时添加来源文件名列 dataFiles <- lapply(file_list, function(file) { # 读取当前csv文件 df <- read.csv(file) # 新增一列,值为当前文件名(basename仅保留文件名,若要完整路径直接用file) df$source_file <- basename(file) # 返回处理后的数据集 df }) # 合并所有数据集 dataFilesCombined <- data.table::rbindlist(dataFiles)
如果你的文件体积较大,推荐用data.table的fread提升读取速度,代码可改为:
dataFiles <- lapply(file_list, function(file) { data.table::fread(file)[, source_file := basename(file)] }) dataFilesCombined <- data.table::rbindlist(dataFiles)
关键说明
basename(file)会提取纯文件名(比如从./subfolder/data001.csv得到data001.csv),若需要保留完整文件路径,直接用file代替basename(file)即可- 该方案完全适配
Sys.glob的文件名匹配规则,不管匹配到多少个文件都能自动处理
内容的提问来源于stack exchange,提问作者Steve Christenson
相关产品推荐
相关产品推荐

