【问题标题】:Merging two data frames horizontally by ID and keep only matches from the second one按 ID 水平合并两个数据帧并仅保留第二个数据帧的匹配项
【发布时间】:2019-04-09 01:52:03
【问题描述】:

我有两个要水平合并的数据框:

dat_a

  a b c
1 1 1 A
2 2 1 A
3 3 1 B
4 4 1 B


dat_b

  a b c
1 3 1 C
2 3 1 C
3 3 1 D
4 4 1 D

我只想保留那些来自dat_a 的行,这些行在dat_b 中匹配ab 列。

所以最终的结果应该是这样的:

dat_c
   a b c
1 3 1 B
2 4 1 B
3 3 1 C
4 3 1 C
5 3 1 D
6 4 1 D

【问题讨论】:

    标签: r join semi-join


    【解决方案1】:

    尝试dplyr 包中的semi_join

    如果您只想要在 dat_b 中匹配的行 dat_a,您可以使用:

    library(dplyr)
    dat_a %>% semi_join(dat_b, by = c("a", "b"))
    

    如果 - 就像在您想要的输出中一样 - 您希望 dat_a 的所有列在 dat_b 中匹配,并且在 dat_b 中的所有列在 dat_atry 中匹配:

    dat_a %>% semi_join(dat_b, by = c("a", "b")) 
      %>% bind_rows(dat_b %>% semi_joim(dat_a, by = c("a", "b")))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多