将两个数据帧合并两列

时间:2016-02-09 16:58:50

标签: 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)

我现在想要将它们合并为x1,x2和x,即如果是字母x 在x1或x2中,应添加相应的y和z值。 如果有两个选择,则应使用x1作为参考。

df1应该是&#34;主人&#34;数据集(如all.x = TRUE参数)。

这里的最终数据框将是

x1  x2  y  z
 a   f  1  11
 b   a  2  12
 z   d  4  14
 u   x  NA NA

我希望看到第二个解决方案,它添加了列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

非常感谢mergedplyrtidyr解决方案

2 个答案:

答案 0 :(得分:1)

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

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)

完全符合您的要求。

答案 1 :(得分:1)

对于第一个解决方案:

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

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