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

时间:2014-12-17 16:01:17

标签: 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))

预期输出将类似于

      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

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

2 个答案:

答案 0 :(得分:5)

您可以将表达式传递给order

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

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

DT[, tmp := a == "REST"]
setorder(DT, tmp, b)

答案 1 :(得分:1)

rbind(DT[a!="REST"][order(DT[a!="REST",b])],
      DT[which.max(DT$a=="REST")])

给出

       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.0
 8: REST 2.5