合并R中的多个dataframess

时间:2016-09-08 00:45:06

标签: r dataframe merge rbind cbind

我遇到了需要合并的多个数据帧的问题。我试过rbind,cbind和基本合并。但它并没有给我带来满意的结果。我的问题如下:

首先df:

<div id="container">
  <h1 contenteditable>
    My long title that can be on multiple lines
  </h1>
  <div>
    <ul>
      <li>a list</li>
      <li>of element</li>
      <li>that can</li>
      <li>be long</li>
      <li>that should</li>
      <li>overflow auto</li>
      <li>bla</li>
      <li>bla</li>
      <li>bla</li>
      <li>bla</li>
      <li>bla</li>
    </ul>
  </div>
</div>

第二个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

当我结合它时,我想:

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

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

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

rbind.fill方法效果不佳。它基本上不会根据需要折叠行。

我从下面的链接尝试了multmerge()。但是无法让它发挥作用。 https://www.r-bloggers.com/merging-multiple-data-files-into-one-data-frame/

由于

2 个答案:

答案 0 :(得分:1)

由于您尝试匹配列,这是一个联接操作,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

答案 1 :(得分:0)

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

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