データテーブル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 に指示します。それが可能かどうか、または実装するのが自然かどうかはわかりません。