【问题标题】:Merging multiple csv files in R在R中合并多个csv文件
【发布时间】:2012-04-29 20:16:33
【问题描述】:

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

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

LatLon 列对于所有 csv 文件都是相同的。合并两个文件很容易

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.  

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

【问题讨论】:

  • list.files(~/source) 是语法错误。 merge_all 不附带通常的 R 安装;请告诉我们它在哪里。
  • merge_all 带有包重塑,是的,语法很抱歉......但在程序中我使用了正确的。

标签: r dataframe


【解决方案1】:

您可以使用Reduce 和普通的merge

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

【讨论】:

    【解决方案2】:

    这也可能有效,但您尚未向我们提供任何可使用的数据。我个人使用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
    

    【讨论】:

    • 谢谢,两者都可以正常工作,但是对于合并一些 csv 文件,我收到错误“match.names(clabs, names(xi)) 中的错误:名称与以前的名称不匹配”。我认为这是因为之前报告的 merge() 函数中的一些错误。
    猜你喜欢
    • 2014-01-07
    • 2015-07-26
    • 2020-09-23
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2019-12-27
    • 2014-10-14
    • 1970-01-01
    相关资源
    最近更新 更多