2013-03-21 13 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はここsave.unsetことができるように= Tは、最後の並べ替えを保存するためにdata.table言うだろう、この

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

ようなもので逆転させることができれば、私は推測種類クールになります逆転した。より良い

まだ、多分

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

このオプションは、実際にDTの順序を変更することなく、参加するか、何のためのキーの順序付けを使用するようにdata.table言うだろう。それが実現可能か自然であるかは不明です。

+1

私はdata.tableでそのようにこれを行う方法を認識していないです。私はキー列の自動並べ替えをしていない*同様の機能要求を覚えています。Matthewは機能リクエストとしてうれしく思います。だから、マシューは、この投稿をチェックすると、(特別な理由がない限り)これを機能要求として追加するのは気にならないと思います。私はこの機能が時々便利になるかもしれないと思う。 – Arun

答えて

5

これがセカンダリ・キーと呼ばれており、これを行うにはset2keyを追加する予定です。手動でセカンダリ・キーを実行することは可能です。しかしそれはあなたが質問に持っているものに非常に似ています。それはかなり多くなってきました。

FR#1007 Build in secondary keys

といくつかの例は:

https://stackoverflow.com/a/13660454/403310
https://stackoverflow.com/a/13969805/403310

関連する問題