【问题标题】:merge two data frames by two columns [duplicate]按两列合并两个数据框[重复]
【发布时间】:2016-02-09 16:58:49
【问题描述】:

我有两个数据框:

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 应该是“主”数据集(如 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 解决方案

【问题讨论】:

  • 对于您的第二个解决方案,只需先在 x=x1 上 left_joining(参见 dplyr::left_join),然后再在 x=x2 上进行操作即可。

标签: r merge dplyr


【解决方案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)

完全符合您的要求。

【讨论】:

  • 您能否添加一个解决方案,其中我有两个以上的列要合并(此处为 y,z)。我不想手动重命名 100 列。
【解决方案2】:

对于第一个解决方案:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2017-11-26
    • 1970-01-01
    相关资源
    最近更新 更多