文字列キー `order(-x,v)` の降順で data.table 内の行を並べ替えると、data.table 1.9.4 以前ではエラーが発生します 質問する

文字列キー `order(-x,v)` の降順で data.table 内の行を並べ替えると、data.table 1.9.4 以前ではエラーが発生します 質問する

data.tableに次のものがあるとしますR

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

x2 つの列 (列ととします) で並べ替えたいのですが、v次のようにします。

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

xしかし、今はそれを(降順で)並べ替えたいので、次のコードを使用します。

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

したがって、このエラーは が原因であると考えられますclass(DT$x)=character。この問題を解決するための提案をいただけますか?

を使用できることはわかっていますDT[order(x,decreasing=TRUE)]が、両方の方法 (減少するものと増加するもの) を同時に使用して複数の列を並べ替える構文を知りたいです。

を使用するとDT[order(-y,v)]結果は正常ですが、 を使用するとDT[order(-x,v)]エラーが発生することに注意してください。そこで、私の質問は、このエラーをどのように解決するかということです。

ベストアンサー1

アップデート

データ表v1.9.6+ では OP の当初の試みがサポートされるようになり、以下の回答は不要になりました。


を使用できますDT[order(-rank(x), y)]

   x y v
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

おすすめ記事