如何将文件夹中所有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)
核心修改点说明
- 调整累积变量初始化:直接初始化
df_all为空表,后续所有合并操作都基于这个变量进行数据累积。 - 修正合并逻辑:把原本用空表
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
相关产品推荐
相关产品推荐

