【问题标题】:删除在 R 中有重复的行
【发布时间】:2022-01-23 16:22:56
【问题描述】:

我有

a <- c(rep("A", 3), rep("B", 3), rep("C",2), rep("D", 1))
b <- c(1,1,2,4,1,1,2,2,5)
df <-data.frame(a,b)

基于df$a,我只想返回不重复的值(那些出现df$a的行),在本例中为1 D 5

我尝试过duplicate()!duplicate()unique(),但都没有输出我需要的东西。

【问题讨论】:

    标签: r dataframe duplicates


    【解决方案1】:

    dplyr 的最简洁方式:

    library(dplyr)
    
    df %>% group_by(a) %>%
       filter(n() == 1)
    

    输出:

    # A tibble: 1 x 2
    # Groups:   a [1]
      a         b
      <chr> <dbl>
    1 D         5
    

    【讨论】:

      【解决方案2】:

      一个选项

      df[!(df$a %in% df$a[duplicated(df$a)]),]
      
        a b
      9 D 5
      

      【讨论】:

      • Nice+1,为了便于阅读,可能是df[!with(df, a %in% a[duplicated(a)]), ]
      【解决方案3】:

      使用data.table

      library(data.table)
      setDT(df)
      df[, tmp:= .N, by = a][tmp == 1, -"tmp"]
         a b
      1: D 5
      

      【讨论】:

        【解决方案4】:

        使用Base R

        x <- table(df[,1])
        
        df[rep(x<2,x),]
        

        给予,

        #   a b
        # 9 D 5
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-25
          • 1970-01-01
          • 2016-05-17
          • 2015-01-19
          • 1970-01-01
          • 2017-01-31
          • 1970-01-01
          • 2021-05-22
          相关资源
          最近更新 更多