Digamos que eu tenho o seguinte data.table
em R
:
library(data.table)
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
Quero ordená-lo por duas colunas (digamos colunas x
e v
). Eu usei isso:
DT[order(x,v)] # sorts first by x then by v (both in ascending order)
Mas agora, quero classificá-lo por x
(em ordem decrescente) e ter o seguinte código:
DT[order(-x)] #Error in -x : invalid argument to unary operator
Portanto, acho que esse erro se deve ao fato de que class(DT$x)=character
. Você poderia me dar alguma sugestão para resolver esse problema?
Sei que posso usar DT[order(x,decreasing=TRUE)]
, mas quero conhecer a sintaxe para classificar por várias colunas usando os dois modos (alguns diminuindo, outros aumentando) ao mesmo tempo.
Observe que se você usar DT[order(-y,v)]
o resultado está ok, mas se você usar, DT[order(-x,v)]
há um erro. Então, minha pergunta é: como resolver esse erro?
DT[order(-x)]
não é uma afirmação equivalente a, setorder(DT, -x)
porque setorder()
na verdade age DT
enquanto o outro não. Declarações equivalentes seriam DT <- DT [ordem (-x)] setorder (DT, -x) Eu sou muito novo em R, então corrija se estiver enganado.