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

标签 r data.table

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

setkey(DT,mykey)

然后,也许我会从另一张 table 上加入一些东西。
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 的顺序。不确定这是否可能或自然实现。

最佳答案

同意。这就是我们所说的二级 key ,计划是添加 set2key做到这一点。现在可以做手动辅助键了。但这与您在问题中的情况非常相似。它已经出现了很多。

FR#1007 Build in secondary keys

和一些例子:

https://stackoverflow.com/a/13660454/403310
https://stackoverflow.com/a/13969805/403310

关于r - 如何撤消 data.table 中的 setkey 排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15552181/

相关文章:

r - 在data.frame中按行拆分并按列分配结果

r - R data.table `.BY` 运算符如何使用?

r - ggplot 堆叠条形图,每个堆叠类别内具有 Alpha 差异

r - 在 R 中绘制 3D 数据

r - 使用 roxygen2 导入两个同名函数

Bass模型遗传算法的R实现

r - data.table 中的 "by"(分组依据)-我错过了什么?

r - 努力在 shinyapps.io 中使用我自己的 API key 和 googlesheets4

r - 为什么 data.table 会通过引用更新名称(DT),即使我分配给另一个变量?

c++ - for循环在Rcpp中崩溃