【问题标题】:R. Join with duplicates only onceR. 只加入一次重复项
【发布时间】:2018-03-29 15:15:54
【问题描述】:

我需要帮助通过一个键将两个数据帧与重复项连接起来。 我只想为每个副本合并一次,我不能用dplyr::left_join 来做。

例子:

    ds1 <- data.frame(
      id = c(1,1,1,2,2),
      V2 = c(5,6,7,5,8)
      )
    ds2<-data.frame(
      id=c(1,2),
      Value=c(56,98)
      )
    ds3<-left_join(ds1, ds2, by="id")

在这种情况下,我有:

# id V2 Value
1  1  5    56
2  1  6    56
3  1  7    56
4  2  5    98
5  2  8    98

但我需要:

# id V2 Value
1  1  5    56
2  1  6    
3  1  7    
4  2  5    98
5  2  8

【问题讨论】:

    标签: r join merge


    【解决方案1】:

    保留您的代码并添加以下内容:

    ds3$Value[duplicated(ds3[c("Value","id")])] <- NA
    #   id V2 Value
    # 1  1  5    56
    # 2  1  6    NA
    # 3  1  7    NA
    # 4  2  5    98
    # 5  2  8    NA
    

    【讨论】:

      【解决方案2】:

      这是另一个想法,使用sliceleft_join,然后是full_join

      ds3 <- ds1 %>%
        group_by(id) %>%
        slice(1) %>%
        left_join(ds2, by = "id") %>%
        full_join(ds1, by = c("id", "V2")) %>%
        ungroup() %>%
        arrange(id, V2)
      ds3
      # # A tibble: 5 x 3
      #     id    V2 Value
      #  <dbl> <dbl> <dbl>
      # 1    1.    5.   56.
      # 2    1.    6.   NA 
      # 3    1.    7.   NA 
      # 4    2.    5.   98.
      # 5    2.    8.   NA 
      

      【讨论】:

        猜你喜欢
        • 2019-01-19
        • 2021-03-05
        • 2017-09-19
        • 2019-09-05
        • 2016-03-26
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多