R批量导入.csv文件合并为data.frame/data.table的最快方法
同结构多CSV文件快速读取合并方案(R环境)
所有CSV文件列字段完全一致的场景下,最高效的实现是基于data.table包的读写函数,文件量越大、单文件体积越大,该方案对比原生read.csv、readr系列方案的速度优势越明显。
具体操作步骤
- 第一步:加载依赖包,获取目标路径下所有CSV文件的完整路径
# 未安装包的话先运行安装命令:install.packages("data.table") library(data.table) # 把路径替换为你实际存放CSV的文件夹路径 target_folder <- "./your_csv_storage_folder" csv_file_list <- list.files( path = target_folder, pattern = "\\.csv$", full.names = TRUE, recursive = FALSE # 如果子文件夹内也有需要读取的CSV,将参数改为TRUE )
- 第二步:批量读取并合并为单个数据对象
fread是data.table内置的高速文件读取函数,读取速度远高于R原生读取函数;rbindlist专门针对列表存储的多个data.table/data.frame做按行合并优化,比原生rbind、do.call(rbind, ...)的效率高几个量级。
# 核心代码,一行完成批量读取+合并,输出为data.table对象(完全兼容data.frame的所有操作语法) merged_data <- rbindlist( lapply(csv_file_list, fread), use.names = TRUE, # 严格按列名对齐合并,避免列顺序错位 fill = FALSE # 因为所有文件列结构完全一致,缺列时会直接报错提醒,不会静默生成NA值 ) # 如果需要标记每一行数据的来源文件,把上面lapply部分替换为以下写法即可: # merged_data <- rbindlist( # lapply(csv_file_list, function(file_path) { # fread(file_path)[, source_file := basename(file_path)] # }), # use.names = TRUE, # fill = FALSE # ) # 如果需要转换为普通data.frame对象,追加运行以下命令即可 # merged_data <- as.data.frame(merged_data)
如果你使用的是1.14.0及以上版本的data.table,还可以直接给
fread传入文件路径向量,内部自动完成批量读取和合并,代码更简洁,运行效率和上述写法无明显差异。
旧版本R适配说明
若你使用的是2008年8月data.table包发布前的旧版本R,可自行查找对应历史适配方案。这类旧方案普遍采用循环调用原生read.csv、逐次rbind拼接的逻辑,内存占用高、运行速度慢,非极端兼容场景不推荐使用。
内容的提问来源于stack exchange,提问作者webb
相关产品推荐
相关产品推荐

