2016-03-09 88 views
-1

我有兩個命名陣列,可能具有不同長度的Rbind陣列的名稱

row1<-c(a="a1",b="b1",c="c1") 
row2<-c(a="a1",d="d1",b="b2",c="c2") 

我想將它們綁定保持名稱的順序,即結果應該是:

 a d b c 
row1 "a1" NA "b1" "c1" 
row2 "a1" "d1" "b2" "c2" 

但使用通常rbind結果反而

 a d b c 
row1 "a1" "b1" "c1" "a1" 
row2 "a1" "d1" "b2" "c2" 

有何建議?

謝謝

回答

3

我建議

n = sort(union(names(row1),names(row2))) 
rbind(row1[n], row2[n]) 

#  a b c <NA> 
# [1,] "a1" "b1" "c1" NA 
# [2,] "a1" "b2" "c2" "d1" 

如果多行參與其中,你可以做

myrows = list(row1,row2) 
n = sort(Reduce(union, lapply(myrows, "names"))) 
do.call(rbind, lapply(myrows, `[`, n)) 


問題標記爲data.frame,但該示例使用矩陣。隨着data.frames,我會用這些軟件包之一:

# new example 
r1<-data.frame(a="a1",b="b1",c="c1", stringsAsFactors=FALSE) 
r2<-data.frame(a="a1",d="d1",b="b2",c="c2", stringsAsFactors=FALSE) 

library(data.table) 
rbindlist(list(r1,r2), fill=TRUE) 

#  a b c d 
# 1: a1 b1 c1 NA 
# 2: a1 b2 c2 d1 

library(dplyr) 
bind_rows(r1, r2) 

#  a  b  c  d 
# (chr) (chr) (chr) (chr) 
# 1 a1 b1 c1 NA 
# 2 a1 b2 c2 d1 

同樣,如果許多行參與,rs = list(r1,r2),你可以做rbindlist(rs, fill=TRUE)do.call(bind_rows, rs)