如何撤消data.table中的setkey排序?

use*_*975 14 r data.table

假设我有一个数据表DT,我用set键更改了顺序

setkey(DT,mykey)
Run Code Online (Sandbox Code Playgroud)

然后,也许我从另一张桌子加入一些东西.

DT=DT2[DT]
Run Code Online (Sandbox Code Playgroud)

有没有办法恢复我原来的行排序?我知道,我可以通过在使用setkey之前显式包含索引来实现.

N=Nrow(DT)
DT[,orig_index:=1:N]
setkey(DT,mykey)
DT=DT2[DT]
setkey(DT,orig_index)
DT[,orig_index:=NULL]
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?如果我使用order而不是set key这样做,这会更简单一些.

o=order(DT$mykey)
uo=order(o)
setkey(DT,mykey)
DT=DT2[DT]
DT=DT[uo,]
Run Code Online (Sandbox Code Playgroud)

如果setkey可以通过这样的方式反转,我会觉得很酷

setkey(DT,mykey,save.unset=T)
DT=DT2[DT]
unsetkey(DT)
Run Code Online (Sandbox Code Playgroud)

这里save.unset = T会告诉data.table保存最后一次重新排序,以便可以反转.

好吧,也许吧

setkey(DT, reorder=F)
DT=DT2[DT]
Run Code Online (Sandbox Code Playgroud)

此选项将告诉data.table在不实际更改DT顺序的情况下使用连接的键排序或其他任何内容.不确定这是否可行或自然实施.

Mat*_*wle 7

同意.这就是我们所说的二级密钥,计划是添加set2key以做到这一点.现在可以进行手动辅助键.但这与你在问题中的内容非常相似.它出现了很多.

FR#1007内置辅助密钥

和一些例子:

/sf/answers/956231811/
/sf/answers/977886381/