2014-02-21 5 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

Try:

> 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 
Смежные вопросы