2016-01-15 59 views
1

我嘗試在這裏使用合併功能,但我很難過。我很抱歉,因爲這看起來很基本,但by.x和by.y函數對我來說非常混亂。我想提取數據幀A和數據幀B之間的共享列,然後將兩個數據幀合併在一起。數據框不共享任何Taxa(第一列),但它們將共享列X1-X10000的一部分等。這些數據幀中的每一個具有〜8000列和幾百行。在這個例子中,變量X2和X5是共享的,但其他變量X1和X3不共享。基於相交的列名稱向量,我知道數據框共享〜3000列。在R中使用共享列和不同行合併數據幀

數據框答:

Taxa X1  X2  X5 
118 T  N  A 
113 N  N  A 
60  C  Y  G 
121 N  N  N 

數據幀B:

Taxa X2  X3  X5 
200 C  G  N 
119 T  N  G 
30 C  G  G 
21 C  N  N 

希望合併後的數據幀:

Taxa X2  X5 
118  N  A 
113  N  A 
60  Y  G 
121  N  N 
200  C  N 
119  T  G 
30  C  G 
21  C  N 

當我嘗試使用合併功能,通過各種方式,我得到這個(我的實際列號在這裏):

 Taxa  X408050 X995019 
NA <NA>  <NA>  <NA>  
NA.1 <NA>  <NA>  <NA>  
NA.2 <NA>  <NA>  <NA>  
NA.3 <NA>  <NA>  <NA>  
NA.4 <NA>  <NA>  <NA>  
NA.5 <NA>  <NA>  <NA>  
NA.6 <NA>  <NA>  <NA>  

回答

6

以PierreLafortune的建議,我會留下我的建議作爲答案。既然你說你在這兩個數據框中都有8000列,你想要找到哪兩列名稱是通用的。爲了找到共同的列,你可以使用intersect()。一旦你有必要的列名,你的數據框的子集。然後,您可以組合這兩個數據幀。

ind <- intersect(names(mydf), names(mydf2)) 

rbind(mydf[, ind], mydf2[, ind]) 

# Taxa X2 X5 
#1 118 N A 
#2 113 N A 
#3 60 Y G 
#4 121 N N 
#5 200 C N 
#6 119 T G 
#7 30 C G 
#8 21 C N 

DATA

mydf <- structure(list(Taxa = c(118L, 113L, 60L, 121L), X1 = c("T", "N", 
"C", "N"), X2 = c("N", "N", "Y", "N"), X5 = c("A", "A", "G", 
"N")), .Names = c("Taxa", "X1", "X2", "X5"), class = "data.frame", row.names = c(NA, 
-4L)) 

mydf2 <- structure(list(Taxa = c(200L, 119L, 30L, 21L), X2 = c("C", "T", 
"C", "C"), X3 = c("G", "N", "G", "N"), X5 = c("N", "G", "G", 
"N")), .Names = c("Taxa", "X2", "X3", "X5"), class = "data.frame", row.names = c(NA, 
-4L)) 
+1

@ user3545679請避免 「謝謝」 的評論。改爲接受答案。 –