のは、私は以下の持っていると言う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列(たとえば、列x
と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)]
も問題ありませんが、使用するとエラーが発生することに注意してください。だから、私の質問です:このエラーを解決するには?
6
興味深い質問ですが、大きなデータセットで作業している場合は、おそらくdata.tablesのキーを設定する必要があります。キーは、後続のインデックス作成、サブセット化、グループごとの集計などを最大化する順序でデータを配置します。これは、データを印刷するのに適した形式ではないかもしれませんが、多くの場合、それが得られる速度を犠牲にしても少額です。
—
Josh O'Brien
ただし、実際には動作している
—
jeromeResearch 2017年
DT[order(-x)]
のに他のユーザーは動作していないsetorder(DT, -x)
ため、同等のステートメントではないように見えます。同等のステートメントは次のようになりますDT <-DT [order(-x)] setorder(DT、-x)私はRに非常に新しいので、間違っている場合は修正してください。setorder()
DT
@jeromeあなたは正しいです。パンキルはそれらが同等であるとは言わなかったので、私はそれは現状のままで良いと思います。
—
フランク
ここではタイトルの編集が意味があるという@smciに同意しますが、この質問が関連しなくなったことを示すように変更します。何か他のものを期待してグーグルからここに着陸し続けます。私は私の質問の1つでこれを行いました。stackoverflow.com
—
フランク
Nestorggh、改善できる場合を除いて、新しいタイトルをロールバックしないでください。「data.tableで行をソートする」とはほとんど何も言われませんでした。タイトルはあなたの実際の問題を言及する必要があります(1つが降順である複数のキー)。これは1.9.4以前の既知の問題であり、問題ではなくなったことも重要です。
—
smci