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)
x
2 つの列 (列ととします) で並べ替えたいのですが、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