2013-03-21 11 views
12

Diciamo che ho una tabella di dati DT e cambiare l'ordine con chiaveCome si annulla l'ordinamento di un setkey in data.table?

setkey(DT,mykey) 

Poi, forse mi unisco alcune cose da un altro tavolo.

DT=DT2[DT] 

C'è un modo per ripristinare l'ordinamento di riga originale? Lo so, posso farlo includendo esplicitamente un indice prima di usare setkey.

N=Nrow(DT) 
DT[,orig_index:=1:N] 
setkey(DT,mykey) 
DT=DT2[DT] 
setkey(DT,orig_index) 
DT[,orig_index:=NULL] 

C'è un modo più semplice? Se lo stavo facendo con l'ordine al posto del tasto set, questo sarebbe un po 'più semplice.

o=order(DT$mykey) 
uo=order(o) 
setkey(DT,mykey) 
DT=DT2[DT] 
DT=DT[uo,] 

Sarebbe tipo freddo Credo che se setkey potrebbero essere revocati con qualcosa di simile

setkey(DT,mykey,save.unset=T) 
DT=DT2[DT] 
unsetkey(DT) 

Qui save.unset = T direbbe data.table per salvare l'ultimo riordino in modo che possa essere invertito.

Meglio ancora, forse

setkey(DT, reorder=F) 
DT=DT2[DT] 

Questa opzione avrebbe detto data.table di utilizzare l'ordinamento chiave per unisce o qualsiasi altra cosa senza realmente cambiare l'ordine di DT. Non sono sicuro se ciò sia possibile o naturale da implementare.

+1

io non sono a conoscenza di un modo per fare questo in quanto tale in data.table. Ricordo una richiesta simile di funzionalità su * nessun riordino automatico delle colonne chiave * e Matthew l'ha presa felicemente come richiesta di una funzione. Quindi, suppongo che Matthew, quando controlla questo post, non dispiacerebbe aggiungere questa come richiesta di funzionalità (a meno che non ci sia un motivo specifico). Penso che questa funzionalità possa tornare utile anche a volte. – Arun

risposta

Problemi correlati