在data.table中对行进行sorting

假设我在R有以下data.table

  library(data.table) DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9) 

我想要按两列(例如列xv )sorting。 我用这个:

  DT[order(x,v)] # sorts first by x then by v (both in ascending order) 

但现在,我想按x (按降序)sorting,并具有以下代码:

  DT[order(-x)] #Error in -x : invalid argument to unary operator 

因此,我认为这个错误是由于class(DT$x)=character 。 你能给我任何build议,以解决这个问题?

我知道我可以使用DT[order(x,decreasing=TRUE)] ,但是我想知道使用两种方式(一些递减,一些递增)同时排列几个语法的语法。

请注意,如果使用DT[order(-y,v)] ,结果是正确的,但是如果使用DT[order(-x,v)] ,则会出现错误。 所以,我的问题是:如何解决这个错误?

更新

data.table现在支持OP的原始尝试,不再需要下面的答案。


你可以使用DT[order(-rank(x), y)]

  xyv 1: c 1 7 2: c 3 8 3: c 6 9 4: b 1 1 5: b 3 2 6: b 6 3 7: a 1 4 8: a 3 5 9: a 6 6 

您只能使用-在数字条目,所以你可以使用递减和否定顺序你想要的:

 DT[order(x,-v,decreasing=TRUE),] xyv [1,] c 1 7 [2,] c 3 8 [3,] c 6 9 [4,] b 1 1 [5,] b 3 2 [6,] b 6 3 [7,] a 1 4 [8,] a 3 5 [9,] a 6 6 

DT[order(-x)]按预期工作。 我有data.table版本1.9.4。 也许这是在最近的版本中修复的。
另外,我build议setorder(DT, -x)语法与set *命令保持一致,如setnamessetkey