理想的合并,用于数据帧中不同数量的列和行

时间:2017-11-14 14:36:35

标签: r

结构的一些示例数据:

df1 = data.frame(x=c('a', 'b', 'c', 'd', 'e'))
df2 = data.frame(x=c('f', 'g', 'h'),y = c(0,1,0))
df3 = data.frame(x=c('i', 'j','k','l'), y = c(1,7,5,2,6), z = c(75,3,25,2,1))

我有3种不同的数据帧。

df1有22201个对象和121个变量 df2有8403个对象和68个变量 df3有50476个对象和157个变量

我尝试使用merge合并它们,我收到此错误:

Error in fix.by(by.x, x) : 
  'by' must specify one or more columns as numbers, names or logical

使用cbind并收到此错误:

Error in data.frame(..., check.names = FALSE) : 
  arguments imply differing number of rows: 22201, 8403, 50476

和rbind和我收到此错误:

Error in rbind(deparse.level, ...) : 
  numbers of columns of arguments do not match

如何合并具有不同行数和列数的数据帧?我必须引用列在数据帧中具有相同的名称,因此在合并中我希望列数是包含最多的数据帧的最大列数。

2 个答案:

答案 0 :(得分:2)

在这种情况下,请使用库rbind.fill

中的plyr
library(plyr)
rbind.fill(df1, df2, df3)

这将merge所有3 data frames列数不同的plugin.xml

答案 1 :(得分:2)

dplyrplyr的演变,所以我会改用它。 bind_rows将实现您想要的目标:

library(dplyr)
bind_rows(df1, df2, df3, ...)

一个例子:

tbl1 <- data_frame(var1 = c('a', 'b', 'c'),
                   var2 = c('x', 'y', 'z'))

tbl2 <- data_frame(var1 = c('e', 'd', 'g', 'h'))

tbl3 <- data_frame(var6 = 1, 
                   var10 = 14)

> bind_rows(tbl1, tbl2, tbl3)
# A tibble: 8 x 4
   var1  var2  var6 var10
  <chr> <chr> <dbl> <dbl>
1     a     x    NA    NA
2     b     y    NA    NA
3     c     z    NA    NA
4     e  <NA>    NA    NA
5     d  <NA>    NA    NA
6     g  <NA>    NA    NA
7     h  <NA>    NA    NA
8  <NA>  <NA>     1    14