结构的一些示例数据:
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
如何合并具有不同行数和列数的数据帧?我必须引用列在数据帧中具有相同的名称,因此在合并中我希望列数是包含最多的数据帧的最大列数。
答案 0 :(得分:2)
在这种情况下,请使用库rbind.fill
plyr
library(plyr)
rbind.fill(df1, df2, df3)
这将merge
所有3 data frames
列数不同的plugin.xml
。
答案 1 :(得分:2)
dplyr
是plyr
的演变,所以我会改用它。
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