如何创建一个表,其中第一个表中的行与R中第二个表的行中的3列相匹配
我需要创建第三个表(df3),其中第一个表(df1)的行与第二个表(df2)中5列中三列的行值相匹配。两个起始表df1和df2的行数不同 例如:如何创建一个表,其中第一个表中的行与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
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中的列chain、type1和type2相匹配。在本例中,它将如下所示:
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。@Orion11internal\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))