订购data.table沿数字列puttint特殊值(剩余类别)最后一列

Jul*_*ian 3 r data.table

是否有可能在数据列中排序data.table,同时最后放置一个特殊行(残余类别)(基于另一列的标签)?

DT <- data.table (a =c("a", "sd", "set", "c", "s", "REST", "sde", "de"), 
              b=c(5,1:4, 2.5, 1:2))
Run Code Online (Sandbox Code Playgroud)

预期的产出会是这样的

      a   b
1:   sd 1.0
2:  sde 1.0
3:  set 2.0
4:   de 2.0
5:    c 3.0
6:    s 4.0
7:    a 5.00
8: REST 2.5
Run Code Online (Sandbox Code Playgroud)

我在下面给出了一个答案,但我想知道是否有一种可能没有rbind.这很复杂,我想这也会复制整个data.table;)

Aru*_*run 5

您可以将表达式传递给order.

DT[order(a=="REST", b)] # internally optimised to use data.table's fast ordering
Run Code Online (Sandbox Code Playgroud)

如果您想使用setorder(通过引用重新排序):

DT[, tmp := a == "REST"]
setorder(DT, tmp, b)
Run Code Online (Sandbox Code Playgroud)