2017-05-08 430 views
1

所以我对R很新,现在我试图加载多个.csv文件(约60左右),然后将它们合并在一起。它们都有相似的列,它们的文件名称如下:dem_file_30,dem_file_31。如何在r中加载和合并多个.csv文件?

我一直在尝试在线使用脚本,但不断收到一些错误。我相信我可以用手工做,但那会很乏味。

例子:

file_list <- list.files("/home/sjclark/demographics/") 
list_of_files <- lapply(file_list, read.csv) 
m1 <- merge_all(list_of_files, all=TRUE) 
Error: merge_all doesn't exist 

这一个似乎他们读入R,但当时我没怎么在那之后做...帮助吗?

setwd("/home/sjclark/demographics/") 
filenames <- list.files(full.names=TRUE) 
All <- lapply(filenames,function(i){ 
read.csv(i, header=TRUE) 
}) 
+1

merge_all可能不是从基地R.哪里是它的功能? – www

+1

它来自重塑包吗?如果是这样,请安装并加载包装。 – www

回答

5

它看起来好像你可能会尝试使用上R-bloggers (credit to Tony Cookson)共享漂亮的功能:

multMerge = function(mypath){ 
    filenames = list.files(path = mypath, full.names = TRUE) 
    datalist = lapply(filenames, 
        function(x){read.csv(file = x, 
             header = TRUE, 
             stringsAsFactors = FALSE)}) 
    Reduce(function(x,y) {merge(x, y, all = TRUE)}, datalist) 
} 

或许你已经从差异资料拼凑的东西放在一起?在任何情况下,merge都是您错过的关键基本R函数。任何包中都不存在merge_all

既然你是R的新手(也许是所有的编程),值得注意的是你需要在使用它之前定义这个函数。一旦你这样做,你可以把它像任何其他功能:

my_data <- multMerge("/home/sjclark/demographics/") 
+0

当我插入“合并”而不是“合并所有”时,我得到这个:as.data.frame(y)中的错误:参数“y”缺失,没有默认 –

+0

正如博客文章解释,“合并'一次只能操作两个对象。我刚才共享的函数通过使用另一个名为'Reduce'的函数来反复地将合并应用于数据列表。我不认为有比这里介绍的功能更简单的方法来完成这项任务。 – HFBrowning

1

我刚才已经做了非常相似的任务,也想知道如果有一个更快/更好的方式使用dplyrbind_rows做。

我对这个任务的代码是使用从plyrldply

library(plyr)  
filenames <- list.files(path = "mypath", pattern = "*", full.names=TRUE) 
import.list <- ldply(filenames, read.csv) 

希望帮助

罗里

+0

非常感谢你! –

+0

所以OP需要**追加**不合并?语义非常重要。 – Parfait

+0

@JulietR如果你对这个答案感到满意,请你接受它/请投它 –