【问题标题】:Remove all unique rows删除所有唯一行
【发布时间】:2014-03-23 15:53:53
【问题描述】:

我正在尝试弄清楚如何从数据框中删除所有唯一行,但如果它有重复,我希望保留它。例如 - 我希望其中的所有列与 col1 相同:

df<-data.frame(col1=c(rep("a",3),"b","c",rep("d",3)),col2=c("A","B","C",rep("A",3),"B","C"),col3=c(3,3,1,4,4,3,2,1))
df
  col1 col2 col3
1    a    A    3
2    a    B    3
3    a    C    1
4    b    A    4
5    c    A    4
6    d    A    3
7    d    B    2
8    d    C    1

subset(df,duplicated(col1))
  col1 col2 col3
2    a    B    3
3    a    C    1
7    d    B    2
8    d    C    1

但我想要第 1、2、3、6、7、8 行,因为它们都有相同的第 1 列。如何让第 1 行和第 6 行包含在内?或者,相反,如何删除没有重复的行?

【问题讨论】:

    标签: r duplicates dataframe


    【解决方案1】:

    另一种选择:

    subset(df,duplicated(col1) | duplicated(col1, fromLast=TRUE))
    

    【讨论】:

      【解决方案2】:

      试试:

      > tdf <- table(df$col1)
      a b c d 
      3 1 1 3 
      
      df[df$col1 %in% names(tdf)[tdf>1],]
      > df
        col1 col2 col3
      1    a    A    3
      2    a    B    3
      3    a    C    1
      6    d    A    3
      7    d    B    2
      8    d    C    1
      

      【讨论】:

        【解决方案3】:

        您可以通过使用ave 创建索引来做到这一点:

        df[as.logical(ave(1:nrow(df), df$col1, FUN=function(x) length(x) > 1)), ]
        

        生产

          col1 col2 col3
        1    a    A    3
        2    a    B    3
        3    a    C    1
        6    d    A    3
        7    d    B    2
        8    d    C    1
        

        【讨论】: