【问题标题】:How do you undo a setkey ordering in data.table?如何撤消 data.table 中的 setkey 排序?
【发布时间】:2013-03-11 05:42:11
【问题描述】:

假设我有一个数据表 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 键来执行此操作,这会更简单一些。

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 的顺序。不确定这是否可能或自然实施。

【问题讨论】:

  • 我不知道在 data.table 中这样做的方法。我记得关于不自动重新排序键列 的类似功能请求,而 Matthew 很高兴地将其作为功能请求。所以,我想马修在查看这篇文章时,不会介意将其添加为功能请求(除非有特定原因)。我认为这个功能有时也会派上用场。

标签: r data.table


【解决方案1】:

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

FR#1007 Build in secondary keys

还有一些例子:

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

【讨论】:

    猜你喜欢
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2017-07-27
    • 2017-08-30
    相关资源
    最近更新 更多