【问题标题】:R: Find non-corresponding columns in data frame [duplicate]R:在数据框中查找不对应的列[重复]
【发布时间】:2019-10-10 17:47:19
【问题描述】:

想想这个小的示例数据框(真实的数据框很大):

df <- data.frame(ID=c("C_40", "C_40", "A_301", "A_301", "T_014", "C_4301", "C_4301", "A_345"), genID=c("1", "1", "2", "2", "3","3","4", "4"))

我正在努力解决以下问题: 您会看到始终有 2 个 ID 对应于一个 genID。

“正确”的情况是 ID 和 genID 列匹配,所以前 2 个(C_48 是 1,A_301 是 2)。 其他都是“假”,我需要检测它们(在本例中,genID 3 的 ID 不匹配 = T_014 和 C_4301;genID4 也是如此。

您知道如何提取这些不匹配的案例吗?例如。到一个只显示不匹配的数据框,例如,这里看起来像这样:

 ID     genID
T_014   3
C_4301  3
C_4301  4
A_345   4

所以我需要相同 genID 具有不同 ID 的情况... 感谢您的任何建议!

【问题讨论】:

    标签: r dataframe match extract


    【解决方案1】:

    我们根据不同 'ID' 的数量等于 2 的条件按 'genID' 和 filter 分组

    library(dplyr)
    df %>% 
       group_by(genID) %>% 
       filter(n_distinct(ID) == 2)
    # A tibble: 4 x 2
    # Groups:   genID [2]
    #  ID     genID
    #  <fct>  <fct>
    #1 T_014  3    
    #2 C_4301 3    
    #3 C_4301 4    
    #4 A_345  4    
    

    【讨论】:

      【解决方案2】:

      如果您正在寻找一种非常有效的解决方案来处理大型数据集,我建议您使用data.table 包。这段代码 sn-p 应该可以满足您的需求。

      library(data.table)
      setDT(df)
      unique(df)[, .(ID, count=.N), genID][count>1][, count:=NULL][]
      
      ##     genID     ID
      ##  1:     3  T_014
      ##  2:     3 C_4301
      ##  3:     4 C_4301
      ##  4:     4  A_345
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 2019-02-09
        • 2015-04-12
        • 2011-10-22
        • 2013-08-14
        • 1970-01-01
        • 2018-05-31
        相关资源
        最近更新 更多