【问题标题】:How can I remove all duplicates so that NONE are left in a data frame?如何删除所有重复项以使 NONE 留在数据框中?
【发布时间】:2012-11-25 15:20:09
【问题描述】:

有一个用于 PHP 的 similar question,但我正在使用 R 并且无法将解决方案转换为我的问题。

我有这个包含 10 行和 50 列的数据框,其中一些行完全相同。如果我在它上面使用唯一的,我会得到一行 - 比如说 - “类型”,但我真正想要的是只得到那些只出现一次的行。有谁知道我如何做到这一点?

我可以查看集群和热图以手动对其进行排序,但我的数据框比上面提到的更大(最多 100 行),这有点棘手。

【问题讨论】:

    标签: r duplicates unique r-faq


    【解决方案1】:

    这将提取仅出现一次的行(假设您的数据框名为df):

    df[!(duplicated(df) | duplicated(df, fromLast = TRUE)), ]
    

    它是如何工作的:函数duplicated 测试一行是否从第一行开始至少第二次出现。如果使用参数fromLast = TRUE,则函数从最后一行开始。

    两个布尔结果与|(逻辑“或”)组合成一个新向量,表示所有行出现多次。使用! 否定此结果,从而创建一个布尔向量,指示仅出现一次的线条。

    【讨论】:

      【解决方案2】:

      涉及dplyr 的可能性可能是:

      df %>%
       group_by_all() %>%
       filter(n() == 1)
      

      或者:

      df %>%
       group_by_all() %>%
       filter(!any(row_number() > 1))
      

      由于dplyr 1.0.0,最好的方法是:

      data %>%
          group_by(across(everything())) %>%
          filter(n() == 1)
      

      【讨论】:

        【解决方案3】:

        试试看

        library(dplyr)
        
        DF1 <- data.frame(Part = c(1,2,3,4,5), Age = c(23,34,23,25,24),  B.P = c(87,76,75,75,78))
        
        DF2 <- data.frame(Part =c(3,5), Age = c(23,24), B.P = c(75,78))
        
        DF3 <- rbind(DF1,DF2)
        
        DF3 <- DF3[!(duplicated(DF3) | duplicated(DF3, fromLast = TRUE)), ]
        

        【讨论】:

          猜你喜欢
          • 2019-09-09
          • 1970-01-01
          • 1970-01-01
          • 2020-12-23
          • 2019-09-03
          • 1970-01-01
          • 2023-01-20
          • 2015-09-17
          • 1970-01-01
          相关资源
          最近更新 更多