合并R中的多个csv文件

时间:2012-04-18 12:08:05

标签: r dataframe

我有大约100个带有公共标题的csv文件,我想要合并。标题是“Lat”,“Long”和“value”。我试图合并所有的csv文件,使输出

"Lat" "Lon" "Value1" "Value2"..."Value 100" 
所有csv文件的

LatLon列都相同。合并两个文件很容易

merge(data.frame1, data.frame2, by=c('Lat','Lon'))

但是,我尝试了以下不起作用的代码:

file_list <- list.files(~/source)   
list_of_files <- lapply(file_list, read.csv)  
m1 <- merge_all(list_of_files, by=c("Lat","Lon"), all=TRUE)  

抛出错误

Error in merge.data.frame(dfs[[1]], Recall(dfs[-1]), all = TRUE, sort = FALSE,  : 
  formal argument "all" matched by multiple actual arguments.  

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:4)

您可以使用Reduce和普通merge

m1 <- Reduce(function(old, new) { merge(old, new, by=c('Lat','Lon')) }, list_of_files)

答案 1 :(得分:1)

这可能也有效,但您没有向我们提供任何数据。我个人使用dbaupp的方式,我不确定哪一个更快;然而,我很少进入大数据,因此Reduce方法对我来说更容易使用,就像我去的那样(我在几个月内发布了一个新的R包,它具有基本上基于multimerge的功能)与dbaupp的回应一样的想法)。如果你正在处理大数据,你可能想要对这两个数据进行基准测试(PS我从某个地方偷走了这个,因为我很少在循环中想到解决问题但不能引用哪里)。

DF <- list_of_files[[1]][, c('lat', 'Lon')]
    for (.df in list_of_files) {
    DF <-merge(DF,.df,by=c('Lat', 'Lon'), all=T, suffixes=c("", ""))
}
DF