我想根据手动指定的字符向量来订购数据表。
library(data.table)
DT = data.table(x=c("c","b","a"), y=1:3)
我可以按字母顺序排序:
DT[order(x)]
但我可以根据以下字符向量订购:
preferred.order <- c("b","a","c")
目标是:
data.table(x=c("b","a","c"), y=c(2,1,3))
实际上,我有一个带有收集输出的data.table和第一列中的变量名。出于演示目的,我希望这些变量具有特定的(非字母顺序)顺序。
答案 0 :(得分:4)
一种可能性是加入首选订单:
DT[preferred.order, on="x"]
x y
1: b 2
2: a 3
3: c 1
请注意,这需要preferred.order向量包含DT$x
中的所有元素,并且没有重复项。
作为替代方案,您可以使用首选顺序创建DT$x
的因子变量,然后使用setorder
通过引用对DT进行排序。
DT[, xFac := factor(x, levels=preferred.order)]
setorder(DT, xFac)
返回
DT
x y xFac
1: b 2 b
2: a 3 a
3: c 1 c
哪种方法更可取决于用例。