2013-03-21 15 views
12

Bir veri tablosu DT var ve belki başka tablodan bazı şeyler katılabilir Sonra Data.table'da bir setkey siparişini nasıl geri alırsınız?

setkey(DT,mykey) 

set anahtar

ile sıralamasını değiştirmek düşünelim.

DT=DT2[DT] 

Orijinal satır siparişimi kurtarmanın herhangi bir yolu var mı? Biliyorum, setkey kullanmadan önce bir dizin dahil ederek bunu açıkça yapabilirim.

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

Daha basit bir yol var mı? Bunu set tuşu yerine siparişle yapıyor olsaydım, bu biraz daha basit olurdu.

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

Olurdu tür serin setkey İşte bu

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

gibi bir şeyle tersine çevrilebilir eğer sanırım olmak save.unset T olması, böylece son yeniden sıralama kurtarmak için data.table söylerdim = tersine çevirdi.

Daha

iyisi, belki

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

Bu seçenek katılır veya anahtar sipariş kullanmak data.table söylerdim aslında DT'nin sırasını değiştirmeden neyse. Bu mümkün veya uygulanacak doğal olup olmadığından emin değil.

+1

ben data.table olduğu gibi bunu yapmanın bir yolu farkında değilim. Benzer bir özellik isteğini * kilit sütunların * otomatik olarak yeniden düzenlenmesi * ve Matthew'in bir özellik isteği olarak memnuniyetle aldığını hatırlıyorum. Bu yüzden, Matthew'i, bu gönderiyi kontrol ettiğinde, bunu bir özellik talebi olarak eklemenin sakıncası olmaz (belirli bir neden olmadığı sürece). Bence bu özellik de zaman zaman işe yarayabilir. – Arun

cevap

İlgili konular