2012-12-07 11 views
11

C'è un similar question per PHP, ma sto lavorando con R e non riesco a tradurre la soluzione al mio problema.Come posso rimuovere tutti i duplicati in modo che NESSUNO rimanga in una cornice dati?

Ho questo frame di dati con 10 righe e 50 colonne, in cui alcune delle righe sono assolutamente identiche. Se uso univoco su di esso, ottengo una riga per - diciamo - "tipo", ma quello che effettivamente voglio è ottenere solo quelle righe che appaiono solo una volta. Qualcuno sa come posso ottenere questo?

Posso dare un'occhiata ai cluster e alle heatmap per risolverlo manualmente, ma ho dei frame di dati più grandi di quelli sopra menzionati (con un massimo di 100 righe) dove questo diventa un po 'complicato.

risposta

33

Questo estrarrà le righe che appaiono solo una volta (supponendo che il frame di dati è denominato df):

df[!(duplicated(df) | duplicated(df, fromLast = TRUE)), ] 

Come funziona: La funzione duplicated test se una linea appare, almeno per la seconda volta a partire dalla prima riga. Se viene utilizzato l'argomento fromLast = TRUE, la funzione inizia dall'ultima riga.

Entrambi i risultati booleani sono combinati con | (logico 'o') in un nuovo vettore che indica tutte le linee che appaiono più di una volta. Il risultato di ciò viene annullato usando ! creando così un vettore booleano che indica le linee che appaiono una sola volta.