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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:36:15