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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียงเวกเตอร์ด้วย sort()
- order() สำหรับการจัดลำดับที่ยืดหยุ่น
- การจัดอันดับค่าด้วย rank()
- การเรียงดาต้าเฟรมตามคอลัมน์