Angenommen, ich habe Folgendes data.table
in R
:
library(data.table)
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
Ich möchte es nach zwei Spalten ordnen (sagen wir Spalten x
und v
). Ich habe das benutzt:
DT[order(x,v)] # sorts first by x then by v (both in ascending order)
Aber jetzt möchte ich es sortieren x
(in absteigender Reihenfolge) und den folgenden Code haben:
DT[order(-x)] #Error in -x : invalid argument to unary operator
Daher denke ich, dass dieser Fehler auf die Tatsache zurückzuführen ist, dass class(DT$x)=character
. Können Sie mir einen Vorschlag machen, um dieses Problem zu lösen?
Ich weiß, dass ich verwenden kann DT[order(x,decreasing=TRUE)]
, aber ich möchte die Syntax kennen, nach der mehrere Spalten gleichzeitig in beide Richtungen (einige abnehmend, andere zunehmend) sortiert werden.
Beachten Sie, dass bei Verwendung DT[order(-y,v)]
das Ergebnis in Ordnung ist, bei Verwendung DT[order(-x,v)]
jedoch ein Fehler auftritt. Meine Frage lautet also: Wie kann dieser Fehler behoben werden?
DT[order(-x)]
keine äquivalente Aussage ist, setorder(DT, -x)
weil es setorder()
tatsächlich wirkt, DT
während das andere nicht handelt. Äquivalente Aussagen wären DT <- DT [order (-x)] setorder (DT, -x) Ich bin sehr neu in R, bitte korrigieren Sie, wenn ich mich irre.