根据具有特定(非字母顺序)顺序的字符列来订购data.table

时间:2017-03-02 18:57:37

标签: r data.table

我想根据手动指定的字符向量来订购数据表。

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和第一列中的变量名。出于演示目的,我希望这些变量具有特定的(非字母顺序)顺序。

1 个答案:

答案 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

哪种方法更可取决于用例。