1

我有大约 100 个带有通用标题的 csv 文件,我想将它们合并。标题是“Lat”、“Long”和“value”。我正在尝试合并所有 csv 文件,以便输出为

"Lat" "Lon" "Value1" "Value2"..."Value 100" 

Lat所有 csv 文件的Lon列都是相同的。合并两个文件很容易

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.  

任何人都可以在这方面帮助我。

4

2 回答 2

4

你可以使用Reduce和平原merge

m1 <- Reduce(function(old, new) { merge(old, new, by=c('Lat','Lon')) }, list_of_files)
于 2012-04-18T12:17:29.070 回答
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
于 2012-04-18T14:02:07.387 回答