按照特定(非字母顺序)顺序,基于字符列对数据表进行排序

9
我希望能够基于手动指定的字符向量对数据表进行排序。
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个回答

12

一个可能的解决方案是按照首选顺序进行连接:

DT[preferred.order, on="x"]
   x y
1: b 2
2: a 3
3: c 1

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

作为另一种选择,您可以使用首选顺序创建 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

哪种方法更可取将根据使用情况而异。


因子变量很好用。好主意!我认为这个也可以处理重复值(但我没有)。 - Jakob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接