2013-03-21 18 views
12

Powiedzmy mam DT tabeli danych i następnie zmienić kolejność z zestawem kluczyJak cofnąć porządkowanie setkey w data.table?

setkey(DT,mykey) 

, może dołączyć pewne rzeczy z innej tabeli.

DT=DT2[DT] 

Czy istnieje sposób odzyskania pierwotnego zamówienia na wiersz? Wiem, mogę to zrobić przez jawne włączenie indeksu przed użyciem setkey.

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

Czy istnieje prostszy sposób? Gdybym robił to z porządkiem zamiast z ustawionym kluczem, byłoby to trochę prostsze.

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

Byłoby rodzaj chłodno myślę, czy może zostać odwrócona z setkey coś takiego

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

Tutaj save.unset = T powie data.table zapisać ostatnią zmianę kolejności więc może być wywrócony.

Jeszcze lepiej, może

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

Ta opcja powie data.table użyć klucza zamawianie dołącza lub cokolwiek bez faktycznie zmiana kolejności DT. Nie jestem pewien, czy jest to możliwe lub naturalne do wdrożenia.

+1

nie jestem świadomy sposób, aby zrobić to jako takie w data.table. Pamiętam podobne żądanie funkcji * bez automatycznej zmiany kolejności kluczowych kolumn * i Mateusz biorąc to szczęśliwie jako żądanie funkcji. Tak więc, przypuszczam, Matthew, kiedy sprawdza ten post, nie miałby nic przeciwko dodaniu tego jako żądanie funkcji (chyba że istnieje konkretny powód). Myślę, że ta funkcja może się czasem przydać. – Arun

Odpowiedz