假设我有一个数据表DT,我用set key更改排序
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顺序的情况下使用连接的键排序。不确定这是否可行或自然实施。
答案 0 :(得分:5)
同意。这就是我们调用辅助密钥的计划,并且计划添加set2key
来完成这项工作。现在可以进行手动辅助键。但这与你在问题中的内容非常相似。它出现了很多。
FR#1007 Build in secondary keys
和一些例子:
https://stackoverflow.com/a/13660454/403310
https://stackoverflow.com/a/13969805/403310