将大量文件从一个目录合并到R中的数据框中

时间:2015-07-25 08:22:15

标签: r

我在一个目录中有大量数据文件(> 1000)。我想将它们全部合并到R中的单个数据框中。它们都具有相同数量和类型的列。 到目前为止我所拥有的是:

setwd("directory")
files <- list.files()
for (i in 1:length(files)) assign(files[i], read.csv(files[i]))

这会为1000多个文件中的每一个创建数据框。有没有办法合并它们,而不必输入所有1000多个文件名列表?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:12)

使用data.table(因速度推荐)执行此操作的标准方法是:

library(data.table)
data <- rbindlist(lapply(list.files(), fread))

还有其他功能,例如

rbindlist(lapply(list.files(), fread), fill = TRUE)

将会考虑一些或许多文件具有不同列名的可能性 - 在缺少该列的文件中,任何非重叠都将填充NA

编辑:正如@nicola所提到的,除非你真的知道自己在做什么,否则一般要避免使用assign

有关此目的的进一步参考,请参阅this帖子。

答案 1 :(得分:3)

这样做的一个好方法是使用data.table。这个库有两个好处,适用于您的情况:a)它具有快速读取.csv文件的方式,以及b)快速组合data.tablesdata.frame的扩展名)合而为一。所以本着这种精神,让我提出以下备选方案:

# if you don't have data.table installed, run install.packages('data.table') first
library(data.table)
files <- list.files('directory', full.names = TRUE)
#create a list to manage the individual files, only used to merge them in the end
FILES_LIST=vector("list",length(files)) 
for (i in 1:length(files)) {
    FILES_LIST[[i]]<-fread(files[i]) #this reads your .csv file
}
FILES_LIST = rbindlist(FILES_LIST) #this merges all of your files in a big data.table

您感兴趣的变量最后是FILES_LIST

我希望这会有所帮助。

相关问题