假设我有一个数据表 DT,我用 set 键更改了排序
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]
有没有更简单的方法?如果我用 order 而不是 set key 来做这个,这会更简单一些。
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 的顺序。不确定这是否可能或自然实施。