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

如何用lapply读取多CSV并在bind_rows阶段添加文件名标识列

解决方法

方法一:合并阶段设置文件名标识

你可以用setNames()给读取后的列表数据框设置对应文件名作为名称,再借助bind_rows()的.id参数直接生成文件名列:

bind_rows(setNames(df, basename(files)), .id = "id")
  • basename(files)会提取纯文件名(去掉完整路径),用它给列表里的每个数据框命名
  • .id参数会自动把列表的名称作为新列id的取值,也就是对应的文件名

方法二:读取阶段直接添加文件名列

也可以在读取文件的环节就给每个数据框新增一列存储文件名,后续合并时无需额外处理:

df <- lapply(files, function(i){
  read.csv(i, header=TRUE, skip=4) %>%
    mutate(filename = basename(i))
})

# 直接合并所有数据框
combined_df <- bind_rows(df)

问题背景

我有多个CSV文件,列名位于第5行,因此会跳过前4行保证所有文件列结构一致,但希望添加一列ID标签,内容为对应CSV的文件名(文件名也可能重复出现在前4行的某个单元格中)。

当前代码流程:

  1. 生成文件名列表:
folder = "my\\desktop\\path"
files = list.files(
  path = folder,
  pattern = "_indicator.*csv$",
  recursive = TRUE,    # 包含子文件夹
  ignore.case = T,
  full.names = T
)
  1. 读取所有文件:
df <-
  lapply(files, function(i){
  read.csv(i, header=TRUE, skip=4)
  })

读取后得到包含70个数据框的列表,结构符合预期,但用bind_rows(df.list, .id = "id")合并时,id列仅显示数字序号,想知道能否在合并或读取阶段直接设置文件名为标识,避免后续用mutate替换的低效操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:45:39