如何在R语言中将多个CSV文件读取为单个数据框?
如何在R语言中将多个CSV文件读取为单个数据框?
此前已有类似问题的常见处理方式,但和当前需求不同:
- 将多个CSV文件读取为独立数据框:多数方案使用
assign()函数创建多个独立数据框。 - 创建数据框列表:多数方案通过
append(l, df)或l[[i]]=df将数据框添加至列表中。
可复现示例
先将测试用CSV文件写入临时目录:
library(dplyr) library(tidyr) library(purrr) library(purrrlyr) library(readr) data_dir <- file.path(tempdir(), "iris") dir.create(data_dir) iris %>% # 保留Species列,新增分组列用于拆分文件 mutate(species_group = Species) %>% group_by(species_group) %>% nest() %>% # 按分组写入CSV文件 by_row(~write.csv(.$data, file = file.path(data_dir, paste0(.$species_group, ".csv")), row.names = FALSE))
执行后,data_dir目录下会生成3个CSV文件,以下是将它们合并为单个数据框的几种常用方法:
方法1:Base R 原生实现
# 获取目录下所有CSV文件的完整路径 csv_files <- list.files(data_dir, pattern = "\\.csv$", full.names = TRUE) # 逐个读取文件并合并为单个数据框 combined_df <- do.call(rbind, lapply(csv_files, read.csv))
方法2:Tidyverse 工具链实现(推荐)
借助purrr批量读取,dplyr合并数据框,若使用readr的read_csv还能获得更快的读取速度:
library(purrr) library(dplyr) library(readr) # 获取文件路径 csv_files <- list.files(data_dir, pattern = "\\.csv$", full.names = TRUE) # 读取并合并 combined_df <- csv_files %>% map(read_csv) %>% bind_rows()
方法3:data.table 实现(适合大数据场景)
data.table的fread读取速度远超基础函数,rbindlist合并效率也更高,适合处理大型CSV文件:
library(data.table) csv_files <- list.files(data_dir, pattern = "\\.csv$", full.names = TRUE) combined_df <- rbindlist(lapply(csv_files, fread))
内容的提问来源于stack exchange,提问作者Paul Rougieux
相关产品推荐
相关产品推荐

