使用Data.Table的Fread和Rbindlist进行快速读取和合并数据

4

我正在寻找一种使用data.table的fread和rbindlist函数快速读取和合并大量数据文件的方法。我认为如果fread可以将文件名向量作为参数,那么它可以成为一个优雅的一行代码,如下所示:

mergeddata = rbindlist(fread(list.files("my/data/directory/")))

但是由于似乎没有其他选择,我采取了更加麻烦的方法循环遍历文件以读取它们并将它们分配给临时名称,然后组合一个临时数据表名列表。但是每当我尝试调用数据表名称列表时,我就会出现问题。因此,我的问题是(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))

5
你可以像这样做:lapply(list.files("my/data/directory/"), fread),然后将结果数据框的列表使用 rbind 组合起来。 - eipi10
2个回答

7

以下是使用 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))

如果您想将所有数据文件绑定到数据帧列表中,只需执行以下操作:

# Load data sets
  list.DFs <- lapply(filenames,fread)

5
您可以这样做:datatablelist = lapply(list.files("my/data/directory/"), fread),然后将结果为数据帧列表的rbind在一起。
虽然lapply比显式循环更简洁,但如果您直接将文件读入列表,则循环也可以工作。
datatablelist = list()

for(i in 1:length(datafiles)){
  datatablelist[[datafiles[i]]] = fread(datafiles[i])
}

抱歉耽搁了,但是lapply和rbindlist正是我一直在寻找的(实际上比我期望的更加简洁)。非常感谢你的帮助! - DaedalusBloom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接