14

データテーブルDTがあり、セットキーで順序を変更するとしましょう

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]

このオプションは、実際に DT の順序を変更することなく、結合などにキーの順序を使用するように data.table に指示します。それが可能かどうか、または実装するのが自然かどうかはわかりません。

4

1 に答える 1

7

同意した。これは私たちが二次キーと呼んでいるもので、set2keyまさにそれを行うために追加する予定です。手動のセカンダリ キーを実行できるようになりました。しかし、それはあなたが質問で持っているものと非常に似ています。かなり出てきました。

FR#1007 二次キーのビルド

といくつかの例:

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

于 2013-03-21T19:03:37.313 に答える