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

如何将文件夹中所有CSV文件合并为R DataFrame?代码问题排查

解决R语言合并多个CSV文件的问题

你的代码只读取单个文件的核心问题出在循环内的合并逻辑:

  • 你初始化了空的df_import,但循环里每次都用这个空表和当前文件数据file_data绑定,赋值给df_all。这导致每次循环后df_all只保存当前文件的数据,之前的文件数据完全没被累积。
  • 你没有在循环中更新用来存储合并数据的变量,始终从空表开始合并,自然最后只能得到最后一个文件的内容。

修改后的代码

setwd("你的目标文件夹路径") # 务必替换成实际的文件夹路径
  
# 获取文件夹内所有CSV文件列表
files <- list.files(pattern = "*.csv")
  
# 初始化空的tibble用于存储合并后的数据
df_all <- tibble()
  
# 循环处理每个CSV文件
for (file in files) {
  # 读取当前CSV文件
  file_data <- read_csv(file)
  
  # 添加文件名列,方便后续溯源数据来源
  file_data <- file_data %>%
    mutate(file_name = file)
  
  # 关键修改:将当前文件数据追加到累积表中
  df_all <- bind_rows(df_all, file_data)
}

# 查看最终合并结果
head(df_all)

核心修改点说明

  1. 调整累积变量初始化:直接初始化df_all为空表,后续所有合并操作都基于这个变量进行数据累积。
  2. 修正合并逻辑:把原本用空表df_import合并的代码,改成用已累积数据的df_all和当前文件数据合并,这样每次循环都会把新数据追加到已有数据的后面。

更简洁的tidyverse风格写法(无需手动循环)

如果习惯用tidyverse工具包,可以用purrr的map_dfr函数简化代码,自动完成循环+按行合并的操作:

library(tidyverse)

setwd("你的目标文件夹路径")
files <- list.files(pattern = "*.csv")

# map_dfr会自动将每个文件的结果按行绑定
df_all <- map_dfr(files, ~{
  read_csv(.x) %>%
    mutate(file_name = .x)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:18:28