【问题标题】:R: Merge Data While Retaining Values for One Dataset in DuplicatesR:合并数据,同时保留重复数据集的值
【发布时间】:2020-10-11 20:51:26
【问题描述】:

我有两个数据集,data1data2

data1 <- data.frame(ID = 1:6,
                    A = c("a1", "a2", NA, "a4", "a5", NA),
                    B = c("b1", "b2", "b3", NA, "b5", NA),
                    stringsAsFactors = FALSE)
data1

ID  A   B
1   a1  b1      
2   a2  b2      
3   NA  b3      
4   a4  NA      
5   a5  b5
6   NA  NA

data2 <- data.frame(ID = 1:6,
                    A = c(NA, "a2", "a3", NA, "a5", "a6"),
                    B = c(NA, "b2.wrong", NA, "b4", "b5", "b6"),
                    stringsAsFactors = FALSE)
data2

ID  A   B
1   NA  NA
2   a2  b2.wrong        
3   a3  NA      
4   NA  b4      
5   a5  b5
6   a6  b6

我想通过ID 合并它们,以便生成的合并数据集data.merged 填充两个数据集的字段,但只要两个数据集中有可能的值,就会从data1 中选择值。

也就是说,我希望最终的数据集 data.merge 是:

ID  A   B
1   a1  b1      
2   a2  b2      
3   a3  b3      
4   a4  b4      
5   a5  b5      
6   a6  b6

我环顾四周,找到了similar,但没有找到确切的答案。

【问题讨论】:

    标签: r merge duplicates


    【解决方案1】:

    您可以加入数据并使用coalesce 选择第一个非NA 值。

    library(dplyr)
    
    data1 %>%
      inner_join(data2, by = 'ID') %>%
      mutate(A = coalesce(A.x, A.y), 
             B = coalesce(B.x, B.y)) %>%
      select(names(data1))
    
    #  ID  A  B
    #1  1 a1 b1
    #2  2 a2 b2
    #3  3 a3 b3
    #4  4 a4 b4
    #5  5 a5 b5
    #6  6 a6 b6
    

    或者在基础 R 中将值与 NA 进行比较:

    transform(merge(data1, data2, by = 'ID'), 
              A = ifelse(is.na(A.x), A.y, A.x),
              B = ifelse(is.na(B.x), B.y, B.x))[names(data1)]
    

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2014-08-13
      • 2021-03-11
      • 1970-01-01
      相关资源
      最近更新 更多