2016-06-04 43 views
7

Ho uno data.table (data nel seguito) con 10 colonne (C1, ..., C10) e voglio eliminare le righe duplicate.Annulla setkey() su data.table in R

ho usato accidentalmente setkey(data,C1), così ora quando corro unique(data) ho solo righe univoche basate su colonna C1, mentre voglio rimuovere una riga solo se è identico a un altro su tutte le colonne C1, ..., C10.
C'è un modo per annullare l'operazione setkey()? Ho trovato this question ma non ha aiutato a risolvere il mio provello.

PS: Posso aggirare il problema impostando tutte le colonne nel mio data.table come chiavi con setkeyv(data, paste0("C", 1:10)), ma questa non è affatto una soluzione elegante/pratica.

risposta

9

Innanzitutto, è possibile utilizzare setkey(data, NULL) per rimuovere la chiave.

In secondo luogo, unique.data.table ha un'opzione by che vi permetterà di specificare al volo le colonne da utilizzare per il confronto (indipendentemente da quale tasto è attualmente impostato):

unique(data, by = paste0("C", 1:10)) 

In terzo luogo, invece di utilizzare setkey per molti tasti, usano setkeyv per passare un character vettore:

setkeyv(data, paste0("C", 1:10)) 

una lettura approfondita di ?setkey e ?unique.data.table avrebbe obv iato tutto questo.