是否有可能在数据列中排序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;)
答案 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