【问题标题】:Deleting all rows that have same name in a column删除列中具有相同名称的所有行
【发布时间】:2021-11-12 18:00:14
【问题描述】:

我正在寻找如何删除任何具有重复名称的行。例如,我在 A 列中有一个名称,其中包含以下内容:

A B C D
ABC123 0 1 1
ABC123 1 2 2
X2X2 1 1 0
X1XD-01 1 0 0
BC-56 0 2 1
BC-56 1 1 1
YUA09 0 0 1
GGO-09S 0 1 2

A 列中的任何名称具有重复值,它们都被删除,这样行就消失了。

目标:

A B C D
X2X2 1 1 0
X1XD-01 1 0 0
YUA09 0 0 1
GGO-09S 0 1 2

解决这个问题的最有效方法是什么?

谢谢

【问题讨论】:

    标签: r rows data-wrangling


    【解决方案1】:

    我们可以group_by 所需的列并过滤掉所有n() >=2 的组:

    library(dplyr)
    
    df %>% group_by(A) %>% filter(n()==1)
    
    # A tibble: 4 x 4
    # Groups:   A [4]
      A           B     C     D
      <chr>   <int> <int> <int>
    1 X2X2        1     1     0
    2 X1XD-01     1     0     0
    3 YUA09       0     0     1
    4 GGO-09S     0     1     2
    

    【讨论】:

      【解决方案2】:

      使用table 计算频率并仅选择那些具有 1 行的值。

      subset(df, A %in% names(Filter(function(x) x == 1, table(A))))
      
      #        A B C D
      #3    X2X2 1 1 0
      #4 X1XD-01 1 0 0
      #7   YUA09 0 0 1
      #8 GGO-09S 0 1 2
      

      【讨论】:

        【解决方案3】:

        我们可以使用duplicated创建一个逻辑向量

        df1[!(duplicated(df1$A)|duplicated(df1$A, fromLast = TRUE)),]
                A B C D
        3    X2X2 1 1 0
        4 X1XD-01 1 0 0
        7   YUA09 0 0 1
        8 GGO-09S 0 1 2
        

        数据

        df1 <- structure(list(A = c("ABC123", "ABC123", "X2X2", "X1XD-01", "BC-56", 
        "BC-56", "YUA09", "GGO-09S"), B = c(0L, 1L, 1L, 1L, 0L, 1L, 0L, 
        0L), C = c(1L, 2L, 1L, 0L, 2L, 1L, 0L, 1L), D = c(1L, 2L, 0L, 
        0L, 1L, 1L, 1L, 2L)), class = "data.frame", row.names = c(NA, 
        -8L))
        

        【讨论】:

          猜你喜欢
          • 2022-01-15
          • 2017-11-07
          • 2019-11-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多