使用共享列和不同行合并R中的数据帧

时间:2016-01-15 01:55:22

标签: r merge dataframe

我尝试在这里使用合并功能,但我很难过。我道歉,因为这看起来很基本,但by.x和by.y函数对我来说非常混乱。我想提取数据帧A和数据帧B之间的共享列,然后将两个数据帧合并在一起。数据帧不共享任何Taxa(第一列),但它们将共享列X1-X10000等的一部分。这些数据帧中的每一个都具有~8,000列和几百行。在此示例中,变量X2和X5是共享的,但其他变量X1和X3不共享。基于相交列名称向量,我知道数据帧共享~3000列。

Dataframe A:

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

数据框B:

 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>      

当我尝试以各种方式使用合并功能时,我得到了这个(我的实际列号在这里):

emlBody = ActiveAgnt & vbCrLf & emlBody

1 个答案:

答案 0 :(得分: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

数据

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))