【问题标题】:How to identify unique IDs and the overlap of two datasets in R [duplicate]如何在R中识别唯一ID和两个数据集的重叠[重复]
【发布时间】:2020-12-15 11:35:21
【问题描述】:

我正在使用两个数据集(dataset1 和 dataset2),它们都包含大量客户电子邮件。 我想匹配确定哪些电子邮件在每个数据集中是唯一的,哪些是“重叠的”(在两个数据集中都可以观察到)。我想最终得到 3 个数据集:

  • 具有数据集 1 独有的电子邮件的邮件
  • dataset2 独有的电子邮件
  • 在数据集 1 和数据集 2 中都观察到的电子邮件(重叠)

这是一个可重复性的示例:

dataset1 <- data.frame(email = c("A", "B", "C", "D", "E" ))
dataset2 <- data.frame(email = c("X", "Y", "Z", "D", "E" ))

结果应该是:

  • result1 由电子邮件“A”、“B”、“C”组成
  • 结果 2 由电子邮件“X”、“Y”、“Z”组成
  • result3 由电子邮件“D”、“E”组成

谢谢!

【问题讨论】:

    标签: r dataframe merge unique


    【解决方案1】:

    你可以使用%in%

    result1 <- subset(dataset1, !email %in% dataset2$email)
    result1
    
    #  email
    #1     A
    #2     B
    #3     C
    
    result2 <- subset(dataset2, !email %in% dataset1$email)
    result2
    
    #  email
    #1     X
    #2     Y
    #3     Z
    
    result3 <- subset(dataset1, email %in% dataset2$email)
    result3
    
    #  email
    #4     D
    #5     E
    

    【讨论】:

      【解决方案2】:

      您可以使用setdiff 获取差异,使用intersect 获取数据集的交集:

      setdiff(dataset1$email, dataset2$email)
      #[1] "A" "B" "C"
      setdiff(dataset2$email, dataset1$email)
      #[1] "X" "Y" "Z"
      intersect(dataset1$email, dataset2$email)
      #[1] "D" "E"
      

      【讨论】:

        【解决方案3】:

        也可以使用来自 tidyverse 的过滤连接

        library(tidyverse)
        
        dataset1 <- data.frame(email = c("A", "B", "C", "D", "E" ))
        dataset2 <- data.frame(email = c("X", "Y", "Z", "D", "E" ))
        
        
        
        anti_join(dataset1, dataset2)
        
        
        anti_join(dataset2, dataset1)
        
        
        semi_join(dataset1, dataset2)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          • 1970-01-01
          • 1970-01-01
          • 2019-11-09
          • 1970-01-01
          • 2021-03-22
          • 1970-01-01
          相关资源
          最近更新 更多