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顺序的情况下使用连接的键排序或其他任何内容.不确定这是否可行或自然实施.
同意.这就是我们所说的二级密钥,计划是添加set2key以做到这一点.现在可以进行手动辅助键.但这与你在问题中的内容非常相似.它出现了很多.
和一些例子:
/sf/answers/956231811/
/sf/answers/977886381/