删除所有唯一行

时间:2014-02-21 22:09:05

标签: r duplicates dataframe

我试图找出如何从数据框中删除所有唯一行,但如果它有重复,我希望它留在。例如 - 我希望所有列与col1相同:< / p>

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行,因为它们都有相同的col 1.如何将1和6包括在内?或者,相反,如何删除没有重复的行?

3 个答案:

答案 0 :(得分:11)

另一种选择:

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

答案 1 :(得分:5)

尝试:

> 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

答案 2 :(得分:2)

您可以通过使用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