我尝试在这里使用合并功能,但我很难过。我道歉,因为这看起来很基本,但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
答案 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))