我有两个数据框:
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
非常感谢merge
或dplyr
或tidyr
解决方案
答案 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上面的解决方案。