2013-03-21 2 views
12

내가 데이터 테이블 DT가 나는 어쩌면 내가 다른 테이블에서 몇 가지를 결합, 그리고 data.table에서 setkey 주문을 어떻게 취소합니까?

setkey(DT,mykey) 

설정 키

와 순서를 변경 말할 수 있습니다.

DT=DT2[DT] 

원래 행 순서를 복구 할 수있는 방법이 있습니까? 나는 setkey를 사용하기 전에 색인을 명시 적으로 포함함으로써이 작업을 수행 할 수 있음을 알고있다.

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

더 간단한 방법이 있습니까? 세트 키 대신 주문으로이 작업을 수행했다면 조금 더 간단합니다.

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

그것은 것 종류의 멋진 setkey에 여기이

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

처럼 뭔가 반전 할 수 있는지 추측 할 수 save.unset T가 될 수 있도록 마지막 재정렬을 저장 data.table 말할 것 = 반대로.

더 나은

아직, 어쩌면

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

이 옵션은 조인에 대한 키 순서를 사용하는 data.table 말할 것 실제로 DT의 순서를 변경하지 않고 뭐든간에. 이것이 가능하거나 자연스럽지 않은지 확실하지 않습니다.

+1

나는 data.table에 같은이 작업을 수행 할 수있는 방법을 알고 아닙니다. 필자는 키 기둥 *과 Matthew의 자동 재정렬 기능이 없기 때문에 기능 요청을 기꺼이 받아 들였습니다. 따라서 Matthew가이 게시물을 검토 할 때 특별한 이유가없는 한이 기능을 기능 요청으로 추가하는 데 신경 쓰지 않을 것이라고 생각합니다. 나는이 기능이 때때로 편리 할 수도 있다고 생각한다. – Arun

답변

관련 문제