Katakanlah saya memiliki berikut data.table
di R
:
library(data.table)
DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
Saya ingin memesannya dengan dua kolom (katakanlah kolom x
dan v
). Saya menggunakan ini:
DT[order(x,v)] # sorts first by x then by v (both in ascending order)
Tapi sekarang, saya ingin mengurutkannya x
(dalam urutan menurun) dan memiliki kode berikut:
DT[order(-x)] #Error in -x : invalid argument to unary operator
Oleh karena itu, menurut saya kesalahan ini disebabkan oleh fakta itu class(DT$x)=character
. Bisakah Anda memberi saya saran untuk mengatasi masalah ini?
Saya tahu saya dapat menggunakan DT[order(x,decreasing=TRUE)]
, tetapi saya ingin mengetahui sintaks untuk mengurutkan berdasarkan beberapa kolom menggunakan kedua cara (beberapa menurun, beberapa meningkat) pada saat yang bersamaan.
Perhatikan bahwa jika Anda menggunakan DT[order(-y,v)]
hasilnya ok, tetapi jika Anda menggunakan DT[order(-x,v)]
ada kesalahan. Jadi, pertanyaan saya adalah: bagaimana mengatasi kesalahan ini?
DT[order(-x)]
bukanlah pernyataan yang setara dengansetorder(DT, -x)
karenasetorder()
benar-benar bertindakDT
sementara yang lain tidak. Pernyataan yang setara akan menjadi DT <- DT [order (-x)] setorder (DT, -x) Saya sangat baru mengenal R jadi harap perbaiki jika saya salah.Jawaban:
Memperbarui
data.table v1.9.6 + sekarang mendukung upaya asli OP dan jawaban berikut tidak lagi diperlukan.
Anda bisa menggunakan
DT[order(-rank(x), y)]
.sumber
Anda hanya dapat menggunakan
-
entri numerik, sehingga Anda dapat menggunakan pengurangan dan penghapusan yang Anda inginkan dalam urutan yang meningkat:sumber
character
kolom dan Anda ingin mengurutkan satu bertambah dan yang lainnya menurun.DT[order(x,-rank(w),decreasing=TRUE)]
mengingat itux
danw
keduanya adalah kolom karakter. Terima kasih!DT[order(-x)]
bekerja seperti yang diharapkan. Saya memiliki data.table versi 1.9.4. Mungkin ini telah diperbaiki dalam versi terbaru.Juga, saya menyarankan
setorder(DT, -x)
sintaks sesuai dengan perintah set * sepertisetnames
,setkey
sumber