สมมติว่าฉันมีสิ่งต่อไปนี้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)
ฉันต้องการเรียงลำดับตามสองคอลัมน์ (พูดว่าคอลัมน์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)]
มีข้อผิดพลาด ดังนั้นคำถามของฉันคือ: จะแก้ไขข้อผิดพลาดนี้ได้อย่างไร?
DT[order(-x)]
ไม่ใช่คำสั่งที่เทียบเท่ากับsetorder(DT, -x)
เพราะใช้งานได้setorder()
จริงในDT
ขณะที่อีกฝ่ายไม่ทำ ข้อความเทียบเท่าจะเป็น DT <- DT [order (-x)] setorder (DT, -x) ฉันยังใหม่กับ R มากดังนั้นโปรดแก้ไขหากฉันเข้าใจผิด