2014-02-21 95 views
2

我想弄清楚如何從數據框中刪除所有的唯一行,但是如果它有重複的,我希望保留在這裏。例如 - 我想從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被列入?或者,相反,如何刪除沒有重複的行?

回答

10

另一種選擇:

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

嘗試:

> 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

您可以通過創建一個索引與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