1. ホーム
  2. r

[解決済み] data.table 1.9.4以前で、文字列キー `order(-x,v)` でdata.tableの行を降順でソートするとエラーが発生する。

2022-06-09 07:36:17

質問

例えば、次のようなものがあるとします。 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)

2つのカラムで並べたい(例えばカラム xv ). これを使いました。

 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)] を使用するとエラーが発生します。そこで質問なのですが、このエラーを解決するにはどうしたらいいでしょうか?

どのように解決するのですか?

アップデート

data.table 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