在两个数据帧之间相交多列

use*_*545 4 r dataframe

我有两个数据框,每个数据框有2列.例如:

df.1 = data.frame(col.1 = c("a","a","a","a","b","b","b","c","c","d"), col.2 = c("b","c","d","e","c","d","e","d","e","e"))
df.2 = data.frame(col.1 = c("b","b","b","a","a","e"), col.2 = c("a","c","e","c","e","c"))
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种有效的方法来查找每个col.1 col.2行对df.1的df.2中的行索引.请注意,df.1中的行对可能以相反的顺序出现在df.2中(例如df.1 [1,],即"a","b"出现在df.2 [1,]中为"b" ","一个").这对我来说无关紧要.换句话说,只要df.1中的行对以df.2中的任何顺序出现,我希望它的行索引在df.2中,否则它应该返回NA.还有一点需要注意,两个数据帧中的行对都是唯一的 - 这意味着每个行对只出现一次.

因此对于这两个数据帧,返回向量将是:

c(1,4,NA,5,2,NA,3,NA,6,NA)
Run Code Online (Sandbox Code Playgroud)

npj*_*pjc 5

也许使用dplyr包的东西:

首先制作参考框架

  • 用于row_number()有效地按行指数编号.
  • 使用select"翻转"列瓦尔.

两半:

df_ref_top <- df.2 %>% mutate(n=row_number())
df_ref_btm <- df.2 %>% select(col.1=col.2, col.2=col.1) %>% mutate(n=row_number())
Run Code Online (Sandbox Code Playgroud)

然后绑在一起:

df_ref <- rbind(df_ref_top,df_ref_btm)
Run Code Online (Sandbox Code Playgroud)

左连接和选择向量:

给你的答案

left_join(df.1,df_ref)$n
Run Code Online (Sandbox Code Playgroud)