2015-09-11 36 views
1

比方说,我有以下的数据帧:合并数据帧逐行不等尺寸中的R

a<-data.frame(A=3,B=9,C=10,D=6) 
print(a) 
    A B C D 
1 3 9 10 6 
b<-data.frame(A=1,B=2,D=5) 
print(b) 
    A B D 
1 1 2 5 

我想结合这一起由行,以便相应的列名排队,和NA的产生,其中对应的值丢失,这样最后的结果是:

print(c) 
    A B C D 
1 3 9 6 10 
2 1 2 NA 5 

我曾尝试以下:

rbind(a,b) 
merge(a,b,byrow=TRUE) 

但既没有工作,也没有任何建议?谢谢!

回答

3

我们可以从data.table使用rbindlist。我们将数据框保存在list中,并使用rbindlistfill=TRUE选项为数据集中缺失的列生成NA。

library(data.table) 
rbindlist(list(a,b), fill=TRUE) 
# A B C D 
#1: 3 9 10 6 
#2: 1 2 NA 5 

另一种选择是从dplyr这对于行结合许多dataframes一起高效实现的do.call(rbind, ...)bind_rows

library(dplyr) 
bind_rows(a,b) 
#Source: local data frame [2 x 4] 

# A  B  C  D 
# (dbl) (dbl) (dbl) (dbl) 
#1  3  9 10  6 
#2  1  2 NA  5 
+1

两者都是很好的解决方案谢谢! – costebk08

+0

@ costebk08感谢您的反馈。很高兴知道它的工作原理。 – akrun

2

您可以使用连接,在dplyr中执行。

full_join(a,b) 

    Joining by: c("A", "B", "D") 
    A B C D 
    1 3 9 10 6 
    2 1 2 NA 5