【问题标题】:How do I compare two columns and print non matching values in each dataframe?如何比较两列并在每个数据框中打印不匹配的值?
【发布时间】:2021-06-28 22:46:25
【问题描述】:

我想比较 df1 和 df2 并找到存在 df1 但不存在 df2 并且存在于 df2 但不存在于 r 中的 df1 的条目。

Input:

df1 <- data.frame(ID1 = c("d", "p", "n", "m", "c"))
df2 <- data.frame(ID2 = c("c", "b", "a", "d", "s", "p"))

Output:

nonMatch_Uniquedf1 <- data.frame(ID1 = c("n", "m"))
nonMatch_Uniquedf2 <- data.frame(ID2 = c("b", "a", "s"))

请注意,df1 和 df2 的两列都有不同的行号。

感谢您的帮助。

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    这是使用anti_join 函数达到所需输出的另一种方法。

    library(dplyr)
    
    df1 %>%
      anti_join(df2, 
                # Define equivalence in column names in both df
                by = c("ID2" = "ID1"))
    df2 %>%
      anti_join(df1, 
                # Define equivalence in column names in both df
                by = c("ID1" = "ID2"))
    

    【讨论】:

      【解决方案2】:

      使用 dplyr

      require(dplyr)
      
      df1 %>% 
        filter(!df1$ID1 %in% df2$ID2) #For df1 values not in df2
      df2 %>% 
        filter(!df2$ID2 %in% df1$ID1) #For df2 values not in df1
      

      编辑:预期输出:

      nonMatch_Uniquedf1 <- df1 %>% 
            filter(!df1$ID1 %in% df2$ID2) #For df1 values not in df2
      nonMatch_Uniquedf2 <- df2 %>% 
            filter(!df2$ID2 %in% df1$ID1) #For df2 values not in df1
      

      【讨论】:

      • 感谢您的帮助。这是工作。我几乎没有更正,因为我更新了问题,所以我在你的答案中更改了对象名称。
      猜你喜欢
      • 2016-10-23
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多