R 通过两列合并两个数据帧

R 通过两列合并两个数据帧,r,merge,dplyr,R,Merge,Dplyr,我有两个数据帧: df1 <- data.frame(x1=c("a","b","z","u"), x2=c("f", "a","d","x")) df2 <- data.frame(x=letters[1:10],y=1:10,z=11:20) 我希望看到第二个解决方案,添加列y1、z1和y2、z2 像这样: x1 x2 y1 z1 y2 z2 a f 1 11 6 16 b a 2

我有两个数据帧:

df1 <- data.frame(x1=c("a","b","z","u"),
                  x2=c("f", "a","d","x"))

df2 <- data.frame(x=letters[1:10],y=1:10,z=11:20)
我希望看到第二个解决方案,添加列y1、z1和y2、z2 像这样:

    x1  x2  y1  z1 y2  z2
     a   f  1  11   6  16
     b   a  2  12   1  11
     z   d  NA NA   4  14
     u   x  NA NA   NA NA

如果您希望使用
合并
dplyr
tidyr
解决方案

对于第二个解决方案,您只需使用两个连续的左联接(例如使用
dplyr::left_联接


产生您想要的结果。

对于第一个解决方案:

df1 %>% 
left_join(df2, by = c("x1"="x"))

对于第二个,请参见上面@antoine sac的解决方案。

对于第二个解决方案,只需先在x=x1上左键连接(请参见
dplyr::left_-join
),然后再在x=x2上左键连接即可。请添加一个解决方案,其中我有两个以上的列要合并(这里是y,z)。我不想手动重命名100列。
left_join(df1, df2, by=c("x1"="x")) %>% 
    rename(y1=y, z1=z) %>% 
    left_join(df2, by=c("x2"="x")) %>%
    rename(y2=y, z2=z)
df1 %>% 
left_join(df2, by = c("x1"="x"))