【问题标题】:Merging two data sets but without duplications合并两个数据集但没有重复
【发布时间】:2019-05-01 08:48:48
【问题描述】:

我想从一个数据帧附加信息并将其附加到另一个数据帧,但我无法让合并按我想要的方式工作。

我的例子:

a <- data.frame(well = c(222, 222, 222, 21, 21,21,43,64,64,64),
                   area = c("H", "H", "H", "C", "C", "C", "D", "E", "E", "E"))
b <- data.frame(well = c(222, 21, 43, 64),
                   score = c(12000, 10000, 9000, 20000))

我希望结果如下所示:

 well score area
1  222 12000 H
2   21 10000 C
3   43  9000 D
4   64 20000 E

但我明白了(我不希望井号重复):

 well area score
1    21    C 10000
2    21    C 10000
3    21    C 10000
4    43    D  9000
5    64    E 20000
6    64    E 20000
7    64    E 20000
8   222    H 12000
9   222    H 12000
10  222    H 12000

我的实际数据包含数百行。

谢谢

【问题讨论】:

    标签: r merge tidyr


    【解决方案1】:

    使用data.table加入

    library(data.table)
    setDT(unique(a))[b, on = .(well)]
    #   well area score
    #1:  222    H 12000
    #2:   21    C 10000
    #3:   43    D  9000
    #4:   64    E 20000
    

    【讨论】:

      【解决方案2】:

      由于您在 a 中有重复项,因此您也可以在 merge 中获取它们。一种选择是只有uniquea 然后merge

      merge(unique(a), b)
      
      #  well area score
      #1   21    C 10000
      #2   43    D  9000
      #3   64    E 20000
      #4  222    H 12000
      

      或者合并后取unique

      unique(merge(a, b))
      

      这可以通过left_joindistinct 使用dplyr 来完成

      library(dplyr)
      
      left_join(distinct(a), b)
      left_join(a, b) %>% distinct()
      

      【讨论】:

        猜你喜欢
        • 2017-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多