R按列的数据表顺序返回意外的子集

时间:2018-08-23 16:22:13

标签: r data.table

通过作用域列而不是字符向量对数据表进行排序会返回意外结果:

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

这是预期的行为吗?有人可以指出为什么会出现这些差异的文档吗?

1 个答案:

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

如果我们将xy互换,则会得到

dt[order(c("y", "x"))]
   x y
1: b 2
2: a 1

因为order(c("y", "x"))返回

[1] 2 1