通过作用域列而不是字符向量对数据表进行排序会返回意外结果:
library(data.table)
dt <- data.table(x = rep(c('a', 'b', 'c'), 3),
y = seq(1, 9, 1))
这是预期的:
dt[order(x, y)]
x y
1: a 1
2: a 4
3: a 7
4: b 2
5: b 5
6: b 8
7: c 3
8: c 6
9: c 9
这不是:
dt[order(c('x', 'y'))]
x y
1: a 1
2: b 2
这是预期的行为吗?有人可以指出为什么会出现这些差异的文档吗?
答案 0 :(得分:2)
order(c("x", "y"))
仅返回字符向量c("x", "y")
的顺序
[1] 1 2
所以dt[order(c("x", "y"))]
等于
dt[1:2]
x y 1: a 1 2: b 2
如果我们将x
和y
互换,则会得到
dt[order(c("y", "x"))]
x y 1: b 2 2: a 1
因为order(c("y", "x"))
返回
[1] 2 1