2016-05-10 4 views
1

У меня есть следующий образец:Удалить строки, в которых уровень фактора происходит только один раз в data.frame в R

Id = c(1, 1,2,2,2,1,4,3,3,3) 
long = c("60.466681", "60.664116", "60.766690", "60.86879", "60.986569","60.466681", "60.664116", "60.766690", "60.86879", "60.986569" ) 
data = data.frame(Id, long) 

Я хотел бы удалить строки, где уровень фактора Id происходит только один раз в data.frame. Например, здесь я бы удалил строку с Id = 4 и сохранил остальные.

я использовал с data$duplicated <- duplicated(data$Id), а затем subset(data, data$duplicated=="FALSE"

, но это также удаление первой строки, когда каждый из факторов происходит в первый времени (т.е. первые строки с Id=1 или Id=2)

Id  long duplicated 
1 1 60.466681  FALSE 
2 1 60.664116  TRUE 
3 2 60.766690  FALSE 
4 2 60.86879  TRUE 
5 2 60.986569  TRUE 
6 1 60.466681  TRUE 

Есть ли простой способ сделать это?

Спасибо!

+0

Попробуйте 'gdata :: duplicated2' –

ответ

3
library(plyr) 
data2<-ddply(data,.(Id),function(x){ 
    if(nrow(x)==1){ 
    return(NULL) 
    } 
    else{ 
    return(x) 
    } 
}) 

> data2 
    Id  long 
1 1 60.466681 
2 1 60.664116 
3 1 60.466681 
4 2 60.766690 
5 2 60.86879 
6 2 60.986569 
7 3 60.766690 
8 3 60.86879 
9 3 60.986569 
+0

Это сделало бы трюк, спасибо! – Floni

+0

К сожалению, он не работает с большими файлами (15 миллионов строк), есть проблема с ram, которую у меня обычно нет! – Floni