Angenommen, ich habe Folgendes data.tablein 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 xund 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, DTwä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.