按照列名的字符向量对数据表进行排序

9

我想通过保存列名的变量对data.table进行排序:

我尝试了每种组合,包括+ evalgetc`,但都没有成功:

我有colVar = "someColumnName"

我想将其应用于:DT[order(colVar)]

2个回答

30

data.table有特殊的函数来修改你的数据集,它会直接在原对象上进行修改而不是将其复制到一个新对象中。

您可以使用setkey或(在版本>=1.9.4中)setorder,后者还能够按降序排序。

请注意setkeysetkeyv以及setordersetorderv之间的区别。 v表示您可以传递带引号的变量名或包含变量名的变量。

使用@andrewzm数据集。

dtbl
#    x y
# 1: 1 5
# 2: 2 4
# 3: 3 3
# 4: 4 2
# 5: 5 1

setorderv(dtbl, colVar)[] # or `sekeyv(dtbl, colVar)[]` or `setorderv(dtbl, "y")[]`
#    x y
# 1: 5 1
# 2: 4 2
# 3: 3 3
# 4: 2 4
# 5: 1 5

2
@hibernado 随意接受这个(更高级,但最终更简单)的答案 - Dirk Eddelbuettel
@hibernado 这很有趣。您能否澄清一下为什么这个答案不能回答您的问题? - Andrie
2
我特别想将它应用于DT[order(colVar)]。我发现SO经常用新方法回答问题,这让我非常沮丧。setkeyv虽然快,但对于我的任务来说并不合适,因为我正在使用另一个函数进行排序。我可以完全重新设计它以分离这两个函数,但这会使代码不够清晰。现在清晰度比速度更重要。 - hibernado
4
我建议使用setorderv而不是setkeyv,但您不必接受任何建议,这是您的选择。并且,不,我不需要分数,谢谢,祝您拥有美好的一天。 - David Arenburg

8

您可以使用双括号来创建数据表:

library(data.table)
dtbl <- data.table(x = 1:5, y = 5:1)
colVar = "y"
dtbl_sorted <- dtbl[order(dtbl[[colVar]])]
dtbl_sorted

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