我有大约100个带有公共标题的csv文件,我想要合并。标题是“Lat”,“Long”和“value”。我试图合并所有的csv文件,使输出
"Lat" "Lon" "Value1" "Value2"..."Value 100"
所有csv文件的 Lat
和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.
任何人都可以帮助我。
答案 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