【问题标题】:Merging multiple dataframess in R在 R 中合并多个数据帧
【发布时间】:2017-01-15 19:09:40
【问题描述】:

我遇到了多个需要合并的数据框的问题。我尝试了 rbind、cbind 和基本合并。但这并没有给我令人满意的结果。我的问题如下:

第一个df:

Common, Col 2, Col 3
A, 2, 3
B, 3, 4
C, 4, 5
D, 5, 6

第二个df:

Common, Col 3, Col 4
B, 4, 5
D, 6, 6
E, 3, 4

第三个df:

Common, Col 1, Col 2
A, a, 2
C, f, 4
F, g, 1

当我结合它时,我想要:

Common, Col 1, Col 2, Col 3, Col 4
A, a, 2, NA, NA
B, NA, 3, 4, 5
C, f, 4, 5, NA
D, NA, 5, 6, 6
E, NA, NA, 3, 4
F, g, 1, NA, NA

我当前用于将多个 df 组合在一起的代码使用:

df_list <- mget(ls(pattern="*df"))
New_df <- do.call(rbind.fill, df_list)

rbind.fill 方法效果不佳。它基本上不会按要求折叠行。

我从下面的链接尝试了 multmerge()。但不能让它工作。 https://www.r-bloggers.com/merging-multiple-data-files-into-one-data-frame/

谢谢

【问题讨论】:

    标签: r dataframe merge rbind cbind


    【解决方案1】:

    由于你要匹配列,这是一个join操作,rbind不会做,你需要merge;而merge默认设置by = intersect(names(x), names(y)),即普通列,所以你可以使用Reduce()函数将数据帧一一合并,假设它们已经被收集到一个列表中:

    Reduce(function(x,y) merge(x, y, all=T), df_list)
    
    #  Common Col.2 Col.3 Col.4 Col.1
    #1      A     2     3  <NA>     a
    #2      B     3     4     5  <NA>
    #3      C     4     5  <NA>     f
    #4      D     5     6     6  <NA>
    #5      E  <NA>     3     4  <NA>
    #6      F     1  <NA>  <NA>     g
    

    【讨论】:

    • 非常感谢,这解决了问题。
    • 您好,我认为上述解决方案无法如我所愿。它基本上在 Column Common (A,A,B,B,C,C,D,D,E,F) 中引入了重复项。我可以让它给我(A,B,C,D,E,F)。所以最左边的列需要是唯一的。
    • merge 在原始数据中有重复键时会创建重复键。您可能需要先检查一下。
    • 你是对的@Psidom,现在我有不同的数据集,它们的第一列相同,但其他列可能相同也可能不同。我如何将这些结合起来创建一个主数据集,该数据集在第一列中是唯一的,但也包括其他所有内容。对于第一列中的任何给定索引,不同数据集中存在的其他列与需要添加的其他列相同。
    • 不太清楚你在追求什么。如果要保持第一列的唯一性,请在所有数据框中使用 unique() 以查看是否仍有重复值,或者如果它不起作用,则意味着您必须对分组的数据集应用一些聚合方法按键列。
    【解决方案2】:

    一个不优雅的解决方案是:

    A = data.frame(c1 = c(1, 2), c3 = c('yes', 'no'))
    B = data.frame(c2 = c(1, 2), c4 = c('Tokyo', 'Berlin'))
    
    A1 = cbind(A, c2 = rep(NA, 2), c4 = rep(NA, 2))
    B1 = cbind(B, c1 = rep(NA, 2), c3 = rep(NA, 2))
    
    rbind(A1, B1)
    

    哪个产生

      c1   c3 c2     c4
    1  1  yes NA   <NA>
    2  2   no NA   <NA>
    3 NA <NA>  1  Tokyo
    4 NA <NA>  2 Berlin
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 2023-03-05
      • 2014-04-14
      • 2013-01-03
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多