如何创建一个表,其中第一个表中的行与R中第二个表的行中的3列相匹配

如何创建一个表,其中第一个表中的行与R中第二个表的行中的3列相匹配,r,dataframe,R,Dataframe,我需要创建第三个表(df3),其中第一个表(df1)的行与第二个表(df2)中5列中三列的行值相匹配。两个起始表df1和df2的行数不同 例如: df1 df2 chain freq color length type1 type2 chain freq color length type1 type2 AC 24

我需要创建第三个表(df3),其中第一个表(df1)的行与第二个表(df2)中5列中三列的行值相匹配。两个起始表df1和df2的行数不同

例如:

              df1                                                  df2 
chain   freq   color  length  type1  type2       chain   freq    color  length  type1  type2
AC       24     red    100      C      V2         BD      45      blue   73      C      G5
BD       57     green   87      C      G5         YJ      57      green  78      N      Y6
OP       83     yellow  68      R      Q9         TP       8      orange 98      Y      P2
TP       28     blue    74      Y      P2         HP      50      white  87      A      U9
HP       23     yellow  39      A      U9         ZS      87      red    98      P      N8
                                                  XC       8      green  98      T      N8
结果表中df1中的行与df2中的列chaintype1type2相匹配。在本例中,它将如下所示:

          df3                                
chain   freq    color  length  type1  type2
BD       57     green   87      C      G5
TP       28     blue    74      Y      P2
HP       23     yellow  39      A      U9

我正在尽可能避免循环。我已经浏览了dplyr函数,但是我还不太熟悉这个包。任何想法都很感谢。

我们可以使用
semi\u-join

library(dplyr)
semi_join(df1, df2, by = c('chain', 'type1', 'type2'))
#   chain freq  color length type1 type2
#1    BD   57  green     87     C    G5
#2    TP   28   blue     74     Y    P2
#3    HP   23 yellow     39     A    U9
数据
df1您能否使用
dput
来显示示例。你能试试
merge
internal\u-join
吗?semi\u-join基本上不会创建第三个只有3列的df并添加所有行吗?@Orion11它提供了与输入df1相同的数据集,通过匹配减少了行数,这就是我要寻找的。让我在我的数据集上试试。它看起来很有效,很简单,很优雅。非常感谢。我还有很长的路要走才能适应r。@Orion11
internal\u-join
也应该可以。唯一需要做的是,您只需要从“df2”中选择
by
df1 <- structure(list(chain = c("AC", "BD", "OP", "TP", "HP"), freq = c(24L, 
57L, 83L, 28L, 23L), color = c("red", "green", "yellow", "blue", 
"yellow"), length = c(100L, 87L, 68L, 74L, 39L), type1 = c("C", 
"C", "R", "Y", "A"), type2 = c("V2", "G5", "Q9", "P2", "U9")), class = "data.frame", row.names = c(NA, 
-5L))

df2 <- structure(list(chain = c("BD", "YJ", "TP", "HP", "ZS", "XC"), 
    freq = c(45L, 57L, 8L, 50L, 87L, 8L), color = c("blue", "green", 
    "orange", "white", "red", "green"), length = c(73L, 78L, 
    98L, 87L, 98L, 98L), type1 = c("C", "N", "Y", "A", "P", "T"
    ), type2 = c("G5", "Y6", "P2", "U9", "N8", "N8")), 
    class = "data.frame", row.names = c(NA, 
-6L))