【问题标题】:merge 3 data.frames by column names按列名合并 3 个 data.frames
【发布时间】:2013-02-23 20:33:54
【问题描述】:

我有三个独立的data.frames。三个data.frames 具有相同的列数和相同的行数。此外,它们具有相同的列名。我正在尝试根据列名合并三个 data.frames。我正在使用以下代码来合并两个 data.frames 并返回匹配的数量。

Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, by=n)))

问题是,虽然在这个例子中有两个 data.frames,但在我的例子中,我有 3 个 data.frames。 如何修改代码以合并三个 data.frames 而不是两个?我试图以这种方式修改字符串,只需添加第三个 data.frame 但它不起作用:

  Merged_DF = sapply(names(DF1),function(n) nrow(merge(DF1, DF2, DF3,  by=n)))

它返回以下错误:

 Error in fix.by(by.x, x) :  'by' must specify column(s) as numbers, names or logical

例如:

DF1

 G1  G2  G3
  a   b   f
  b   c   a
  c   d   b

DF2

 G1  G2  G3
  A   b   f
  b   c   a
  h   M   b

DF3

 G1  G2  G3
  a   b   f
  b   l   a
  j   M   v

data.frames 有大约 250 行和 50 列。

【问题讨论】:

  • 请给我们一个你的data.frames的例子。

标签: r dataframe


【解决方案1】:

可以使用Reduce函数合并多个数据框:

df_list <- list(DF1, DF2, DF3)
Reduce(function(x, y) merge(x, y, all=TRUE), df_list, accumulate=FALSE)

或来自reshape 包的merge_recurse

library(reshape)
data <- merge_recurse(df_list)

另请参阅 R Wiki:Merge data frames

【讨论】:

  • 嗨,rcs,非常感谢!是否可以计算所有 data.frames 之间的匹配数?最后我想知道一列一列有多少项,三个data.frames在这里。
  • merge_recourse 不再在新的 reshape2 包中,这个函数有一个错误stackoverflow.com/questions/23121654/…。所以推荐第一个选项。
【解决方案2】:

在今天研究了同一个问题几个小时后,我想出了这个简单而优雅的解决方案,它使用了“dplyr”管道和基本 R 的“merge()”函数的组合。

MergedDF <- merge(DF1, DF2) %>%
              merge(DF3)

正如您在帖子中提到的,这假设列名相同,并且您要合并的每个数据框中的行数相同。这也将自动消除在合并过程中使用的任何重复列(即标识符)。

【讨论】:

    【解决方案3】:

    以防万一有人想合并具有相同列名但行号不相等的多个数据框,这篇文章很有帮助:https://medium.com/coinmonks/merging-multiple-dataframes-in-r-72629c4632a3

    基本上,您使用 do.call 和 rbind 函数:

    Merged <- do.call("rbind", list(df1, df2, df3, df4))
    

    【讨论】:

      【解决方案4】:

      添加data.table 解决方案:

      library(data.table)
          
      Merged= rbindlist(list(df2,df3,df4))
      

      【讨论】:

        猜你喜欢
        • 2014-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        • 2011-12-26
        • 2019-03-02
        相关资源
        最近更新 更多