快速阅读和合并Data.Table的Fread和Rbindlist

Dae*_*oom 4 merge r data.table

我正在寻找一种使用data.table的fread和rbindlist函数快速读取和合并一堆数据文件的方法.我认为如果fread可以将文件名称的矢量作为参数,它可以是一个优雅的线条

mergeddata = rbindlist(fread(list.files("my/data/directory/")))
Run Code Online (Sandbox Code Playgroud)

但由于这似乎不是一个选项,我采用了更为尴尬的方法来循环读取文件并将它们分配给临时名称,然后将创建的临时数据表名称列表放在一起.但是,每当我尝试调用data.table名称列表时,我都会被绊倒.所以我的问题是(1)如何在这种情况下将数据表名称列表传递给rbindlist,(2)更广泛地说是否有更好的方法解决这个问题?

提前感谢您的时间和帮助!

datafiles = list.files()

datatablelist = c()

for(i in 1:length(datafiles)){
  assign(paste("dt",i,sep=""),fread(datafiles[1]))
  datatablelist = append(datatablelist ,paste("dt",i,sep=""))
}

mergeddata = rbindlist(list(datatablelist))
Run Code Online (Sandbox Code Playgroud)

raf*_*ira 6

这是一种使用多个数据帧绑定到一个数据帧的简单方法 fread

# Load library
  library(data.table)

# Get a List of all files named with a key word, say all `.csv` files
  filenames <- list.files("C:/your/folder", pattern=glob2rx("*.csv"), full.names=TRUE)

 # Load and bind all data sets
   data <- rbindlist(lapply(filenames,fread))
Run Code Online (Sandbox Code Playgroud)

如果您想将所有数据文件绑定到数据帧列表中,就像它一样简单

# Load data sets
  list.DFs <- lapply(filenames,fread)
Run Code Online (Sandbox Code Playgroud)


eip*_*i10 5

您可以执行此操作datatablelist = lapply(list.files("my/data/directory/"), fread),然后重新绑定数据框的结果列表。

尽管lapply比显式循环更干净,但如果您将文件直接读入列表,则循环将起作用。

datatablelist = list()

for(i in 1:length(datafiles)){
  datatablelist[[datafiles[i]]] = fread(datafiles[i])
}
Run Code Online (Sandbox Code Playgroud)