2012-03-30 16 views
45

Ho un dataframe con> 100 colonne e vorrei trovare le righe univoche, confrontando solo due colonne. Spero che questo sia facile, ma non riesco a farlo funzionare con unique o duplicated me stesso.Unico su un dataframe con solo colonne selezionate

In seguito, vorrei unica solo con ID e ID2:

data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) 

id id2 somevalue 
1 1   x 
1 1   y 
3 4   z 

Vorrei ottenere uno:

id id2 somevalue 
1 1   x 
3 4   z 

o:

id id2 somevalue 
1 1   y 
3 4   z 

(Non ho preferenze su quale delle righe univoche viene mantenuta)

+0

l'output desiderato non è ben definito. Come scegli di includere x ma non y? Questa decisione dovrà essere presa per ogni colonna di ogni riga ripetuta e non hai dato alcuna indicazione su come farlo. – joran

+0

Non ho preferenze se è incluso 'x' o 'y'. Aggiornerò la domanda – Ina

risposta

77

Ok, se non importa quale valore nella colonna non duplicato si seleziona, questo dovrebbe essere abbastanza facile:

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) 
> dat[!duplicated(dat[,c('id','id2')]),] 
    id id2 somevalue 
1 1 1   x 
3 3 4   z 

All'interno la chiamata duplicated, che sto semplicemente passando solo le colonne da dat che Non voglio duplicati di. Questo codice seleziona sempre automaticamente prima di qualsiasi valore ambiguo. (In questo caso, x.)

+0

qual è la versione per un datatable – Ferroao

+0

@Ferroao secondo questo sito web, non è possibile in SQL http://www.dofactory.com/sql/select-distinct –

8

Uso unique():

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z"))  
dat[row.names(unique(dat[,c("id", "id2")])),] 
Problemi correlati