0Pricing
R Academy · บทเรียน

order() สำหรับการจัดลำดับที่ยืดหยุ่น

รับการสับเปลี่ยนดัชนีเพื่อเรียงลำดับตามเกณฑ์เดียวหรือหลายเกณฑ์

order() สำหรับการจัดลำดับที่ยืดหยุ่น เป็นบทเรียน R Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน R Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

order() คืนค่าอะไร

order() ไม่ได้คืนค่าที่เรียงแล้ว แต่คืนดัชนีที่จะใช้เรียงเวกเตอร์ การอ้างอิงทางอ้อมนี้ทำให้ฟังก์ชันมีความสามารถมากกว่า sort() อย่างมาก เพราะคุณสามารถนำดัชนีเหล่านั้นไปใช้กับโครงสร้างที่เกี่ยวข้องใด ๆ ก็ได้

x <- c(30, 10, 50, 20, 40)
indices <- order(x)
print(indices)
# Verify: x[indices] gives sorted x
print(x[indices])

order() ในลำดับจากมากไปน้อย

เช่นเดียวกับ sort() ฟังก์ชัน order() รับค่า decreasing = TRUE เพื่อคืนดัชนีที่ทำให้เกิดลำดับจากมากไปน้อย ซึ่งมีประโยชน์สำหรับการเรียงจากค่ามากที่สุดไปหาค่าน้อยที่สุด

scores <- c(78, 92, 65, 88, 71)
desc_order <- order(scores, decreasing = TRUE)
cat('Rank order (index):', desc_order, '\n')
cat('Scores high to low:', scores[desc_order], '\n')

การเรียงกรอบข้อมูลตามคอลัมน์เดียว

การใช้งาน order() ที่พบได้บ่อยที่สุดคือ การเรียงกรอบข้อมูลตามคอลัมน์ใดคอลัมน์หนึ่ง ให้ส่งคอลัมน์นั้นให้กับ order() จากนั้นใช้ดัชนีที่ได้เพื่อจัดเรียงแถวทั้งหมดของกรอบข้อมูลใหม่

df <- data.frame(
  name = c('Charlie', 'Alice', 'Bob', 'Diana'),
  age  = c(35, 28, 42, 31)
)
sorted_df <- df[order(df$age), ]
print(sorted_df)

การเรียงกรอบข้อมูลจากมากไปน้อย

หากต้องการเรียงกรอบข้อมูลจากค่ามากไปหาค่าน้อยตามคอลัมน์ตัวเลข ให้ส่งค่า decreasing = TRUE ให้กับ order() ชื่อแถว (ดัชนี) ในผลลัพธ์จะสะท้อนตำแหน่งเดิม

products <- data.frame(
  item  = c('Pen', 'Notebook', 'Stapler', 'Tape'),
  price = c(1.5, 4.99, 7.25, 2.10)
)
products[order(products$price, decreasing = TRUE), ]

การจัดลำดับหลายคอลัมน์

ส่งเวกเตอร์หลายตัวให้กับ order() โดยคั่นด้วยจุลภาค R จะเรียงตามอาร์กิวเมนต์แรกก่อน จากนั้นใช้ตัวที่สอง ตัวที่สาม และตัวถัด ๆ ไปเพื่อจัดการค่าที่เท่ากัน พฤติกรรมนี้สอดคล้องกับการทำงานของคำสั่ง ORDER BY ใน SQL

df <- data.frame(
  dept   = c('HR', 'IT', 'HR', 'IT', 'HR'),
  salary = c(50000, 70000, 60000, 65000, 55000)
)
# Sort by dept first, then by salary within dept
df[order(df$dept, df$salary), ]

การเรียงหลายคอลัมน์แบบผสมจากน้อยไปมากและจากมากไปน้อย

หากต้องการเรียงคอลัมน์หนึ่งจากน้อยไปมากและอีกคอลัมน์จากมากไปน้อย ให้ใส่เครื่องหมายลบ - หน้าคอลัมน์ตัวเลขที่ต้องการเรียงจากมากไปน้อย สำหรับคอลัมน์ character ให้ใช้ xtfrm() เพื่อสร้างตัวแทนแบบ integer ที่สามารถเรียงได้ แล้วจึงใส่เครื่องหมายลบ

df <- data.frame(
  dept   = c('HR', 'IT', 'HR', 'IT', 'HR'),
  salary = c(50000, 70000, 60000, 65000, 55000)
)
# dept ascending, salary descending
df[order(df$dept, -df$salary), ]

การจัดการ NA ใน order()

order() มีอาร์กิวเมนต์ na.last เช่นเดียวกับ sort() โดยค่าเริ่มต้นคือ na.last = NA ซึ่งจะวางค่า NA ไว้ท้ายสุด กำหนด na.last = TRUE หรือ na.last = FALSE เพื่อควบคุมตำแหน่งอย่างชัดเจน

vals <- c(5, NA, 2, NA, 8, 1)
# Default: NAs sorted last
order(vals)
# NAs first
order(vals, na.last = FALSE)

การรักษาชื่อแถวหลังการเรียงลำดับ

เมื่อคุณเลือกส่วนย่อยของกรอบข้อมูลด้วยดัชนีแถว R จะรักษาชื่อแถวเดิมไว้ ใช้ row.names(df) <- NULL หรือแนวทาง reset= เพื่อกำหนดชื่อแถวใหม่เป็น 1, 2, 3, ... หลังการเรียงลำดับ

df <- data.frame(
  city = c('Paris', 'Tokyo', 'NYC'),
  pop  = c(2.1, 13.9, 8.3)
)
sorted <- df[order(df$pop), ]
print(sorted)
# Reset row names
row.names(sorted) <- NULL
print(sorted)

เปรียบเทียบ order() กับ sort()

ความแตกต่างสำคัญคือ sort(x) คืนค่าที่เรียงแล้ว ส่วน order(x) คืนตำแหน่งที่เรียงแล้ว ใช้ sort() เมื่อคุณต้องการเพียงค่า และใช้ order() เมื่อต้องการจัดเรียงโครงสร้างข้อมูลที่เกี่ยวข้องไปพร้อมกัน

x <- c(50, 20, 80, 10, 60)
cat('sort(x)  :', sort(x), '\n')
cat('order(x) :', order(x), '\n')
cat('x[order(x)]:', x[order(x)], '\n')

การเรียงกรอบข้อมูลตามคอลัมน์สตริง

คุณสามารถเรียงตามคอลัมน์ character ได้เช่นกัน order(df$name) จะคืนดัชนีแถวตามลำดับตัวอักษรของคอลัมน์ name จากนั้นคุณจึงใช้ดัชนีเหล่านั้นเพื่อจัดเรียงกรอบข้อมูลใหม่

employees <- data.frame(
  name   = c('Zara', 'Ahmed', 'Maria', 'Bruno'),
  tenure = c(3, 7, 2, 5)
)
employees[order(employees$name), ]

การต่อ order() สำหรับการเรียงที่ซับซ้อน

การเรียงสามระดับทำได้โดยตรง เพียงส่งเวกเตอร์สามตัวให้กับ order() อาร์กิวเมนต์เพิ่มเติมแต่ละตัวจะถูกใช้เป็นตัวตัดสินเมื่อค่าจากอาร์กิวเมนต์ก่อนหน้าเท่ากัน

df <- data.frame(
  region = c('West', 'East', 'West', 'East', 'West'),
  dept   = c('HR', 'IT', 'HR', 'IT', 'IT'),
  score  = c(85, 90, 78, 88, 92)
)
df[order(df$region, df$dept, df$score), ]

ตรวจสอบความเข้าใจอย่างรวดเร็ว

order(x) คืนค่าอะไรเมื่อใช้กับเวกเตอร์ x

ประเด็นสำคัญของ order()

ประเด็นสำคัญของ order():

  • order(x) คืนดัชนี ไม่ใช่ค่า — ใช้ x[order(x)] เพื่อดูค่าที่เรียงแล้ว
  • เรียงกรอบข้อมูลด้วย df[order(df$col), ]
  • การเรียงหลายคอลัมน์: order(df$a, df$b) — ค่าที่เท่ากันใน a จะถูกตัดสินด้วย b
  • ใส่เครื่องหมายลบ - หน้าคอลัมน์ตัวเลขเพื่อเรียงจากมากไปน้อยในการเรียงหลายคอลัมน์
  • ควบคุมตำแหน่งของ NA ด้วย na.last = TRUE/FALSE/NA
  • ต่างจาก sort() ตรงที่ order() ช่วยให้คุณเรียงโครงสร้างข้อมูลที่อยู่คู่ขนานกันไปพร้อมกันได้
df <- data.frame(
  name  = c('Eve', 'Bob', 'Alice', 'Charlie'),
  score = c(88, 92, 88, 75)
)
# Sort by score descending, then name ascending for ties
df[order(-df$score, df$name), ]

คำถามที่พบบ่อย

บทเรียน “order() สำหรับการจัดลำดับที่ยืดหยุ่น” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “order() สำหรับการจัดลำดับที่ยืดหยุ่น” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส R Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส R Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “order() สำหรับการจัดลำดับที่ยืดหยุ่น”

รับการสับเปลี่ยนดัชนีเพื่อเรียงลำดับตามเกณฑ์เดียวหรือหลายเกณฑ์ คุณปฏิบัติ R Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน R Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน R Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “order() สำหรับการจัดลำดับที่ยืดหยุ่น” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน R Academy นี้ได้ไหม

ได้ บทเรียน R Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเรียงเวกเตอร์ด้วย sort()
  2. order() สำหรับการจัดลำดับที่ยืดหยุ่น
  3. การจัดอันดับค่าด้วย rank()
  4. การเรียงดาต้าเฟรมตามคอลัมน์
← กลับไปที่ R Academy