根据字符列对data.table进行排序,并牢记特定顺序(非字母顺序)

Pet*_*Pan 2 r data.table

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

library(data.table)
DT = data.table(x=c("c","b","a"), y=1:3)
Run Code Online (Sandbox Code Playgroud)

我可以按字母顺序排序:

DT[order(x)]
Run Code Online (Sandbox Code Playgroud)

但我可以根据像这样的字符向量来订购它吗:

preferred.order <- c("b","a","c")
Run Code Online (Sandbox Code Playgroud)

目标是:

data.table(x=c("b","a","c"), y=c(2,1,3))
Run Code Online (Sandbox Code Playgroud)

实际上,我在第一列中有一个data.table,其中包含收集的输出和变量名称。为了便于演示,我希望这些变量以特定的顺序(而不是字母顺序)排列。

lmo*_*lmo 5

一种可能性是加入首选订单:

DT[preferred.order, on="x"]
   x y
1: b 2
2: a 3
3: c 1
Run Code Online (Sandbox Code Playgroud)

请注意,这要求preferred.order向量包含中的所有元素,DT$x并且没有重复项。

或者,您可以DT$x使用首选顺序创建一个因子变量,然后用于setorder通过引用对DT进行排序。

DT[, xFac := factor(x, levels=preferred.order)]
setorder(DT, xFac)
Run Code Online (Sandbox Code Playgroud)

哪个返回

DT
   x y xFac
1: b 2    b
2: a 3    a
3: c 1    c
Run Code Online (Sandbox Code Playgroud)

哪种方法更好,取决于使用情况。