【发布时间】:2018-08-02 08:51:51
【问题描述】:
我在一个文件夹中有 44496 个 csv 文件。
如果我想在一个文件夹中读取所有这些 csv 文件,我可以这样做:
files = list.files(pattern="*.csv")
library(data.table)
DT = do.call(rbind, lapply(files, fread)
每个文件的名称为wrX_Y.csv。我有 5562 个 X 值和 8 个 Y 值。
例如,对于 X 的每个值,我有 8 个 csv 文件。
wr1_258, wr1_260, wr1_265, wr1_280, wr1_290, wr1_300, wr1_310,wr1_320
wr2_258, wr2_260, wr2_265, wr2_280, wr2_290, wr2_300, wr2_310,wr2_320
.
.
.
.
wr5562_258, wr5562_260, wr5562_265, wr5562_280, wr5562_290, wr5562_300, wr5562_310,wr5562_320
我想合并属于给定 X 的所有文件。例如,
wr1_258, wr1_260, wr1_265, wr1_280, wr1_290, wr1_300, wr1_310,wr1_320 into a single csv
wr2_258, wr2_260, wr2_265, wr2_280, wr2_290, wr2_300, wr2_310,wr2_320 into a single csv and so on
假设names.list 是一个包含所有 X 值的向量。我如何读取属于单个 X 的所有 csv,将它们合并并写出
for(i in names.list){
files <- list.files(pattern = "*.csv", full.names = T)
DT = do.call(rbind, lapply(files, fread) # one read those csv files which belong to i
fwrite(DT,paste0(i,"alldata.csv"))
}
【问题讨论】:
-
您检查过
list.files(..., recursive=TRUE, full.names=TRUE)以检查子文件夹并获取完整路径吗?使用模式,您可以选择任何正则表达式来选择您的文件。 -
好的。我现在修改了这个问题。我指定使用
path。 -
因此,通过使用
patter='^X1_.*\\.csv$',您只选择以X1_开头的文件...另外我建议使用file.path作为文件路径而不是paste0。 -
@drmariod 递归参数在这种情况下有什么影响?
-
谢谢。抱歉,我的问题不清楚,所以您的解决方案对我不起作用。我现在修改了我的问题。
标签: r csv for-loop import data.table