Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将一个目录中的大量文件合并到R中的数据帧中_R - Fatal编程技术网

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

将一个目录中的大量文件合并到R中的数据帧中,r,R,我在一个目录中有大量数据文件(>1000)。我想将它们合并到R中的单个数据帧中。它们的列数和类型都相同。 到目前为止,我得到的是: setwd("directory") files <- list.files() for (i in 1:length(files)) assign(files[i], read.csv(files[i])) setwd(“目录”) 文件这样做的一个好方法是利用data.table。这个库有两个好处,可以在您的情况下使用:a)它可以快速读取.csv文件,b)

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

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

文件这样做的一个好方法是利用
data.table
。这个库有两个好处,可以在您的情况下使用:a)它可以快速读取.csv文件,b)可以快速将
数据.tables
(是
数据.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
#如果未安装data.table,请先运行install.packages('data.table')
库(数据表)

文件使用
数据执行此操作的标准方法。表
(因其速度而推荐):

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


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


有关这方面的更多信息,请参阅帖子。

我想知道是谁教新手使用R中的
assign
。不要使用
分配
。只需尝试
do.call(rbind,lappy(files,read.csv))
。检查并执行Too是否需要“合并”或追加?如果你正在合并,你在合并什么变量?@nicola为什么不在这种情况下使用
assign
?这是一个很好的解决方案。如果我想通过添加新列而不是新行来绑定文件,该怎么办?有没有一个等价的
cbindlist
?@RafaelPereira这真的是一个不同的问题,我肯定有人问过。简而言之,它不会像
cbindlist
那么简单,但在我脑海中有两个选项:1)使用
rbindlist
,然后使用
dcast
结果;2) 使用
on
选项和
:=
运算符按顺序合并列。需要记住的一点是,合并对于添加列是必不可少的,因为我们应该将行视为神圣不可侵犯的观察结果——也就是说,与每个ID关联的值都与该ID相关联,即顺序问题,这是添加行的对比。
library(data.table)
data <- rbindlist(lapply(list.files(), fread))
rbindlist(lapply(list.files(), fread), fill = TRUE)