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"))