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

การจัดอันดับค่าด้วย rank()

กำหนดอันดับด้วยวิธีจัดการค่าที่เท่ากัน ได้แก่ average, first, min, max และ random

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

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

rank(x) คืนอันดับของค่าต่าง ๆ ในเวกเตอร์ ขนาดเล็กที่สุดจะได้อันดับ 1 ขนาดเล็กเป็นอันดับสองจะได้อันดับ 2 และต่อไปเรื่อย ๆ ต่างจาก order() ตรงที่ผลลัพธ์มีความยาวเท่ากับข้อมูลนำเข้า โดยแต่ละตำแหน่งจะเก็บอันดับของค่านั้น

scores <- c(78, 92, 65, 88, 71)
ranks <- rank(scores)
print(scores)
print(ranks)

การจัดการค่าที่เท่ากัน: วิธีหาค่าเฉลี่ย

เมื่อค่าหลายค่าเท่ากัน rank() จะใช้อาร์กิวเมนต์ ties.method เพื่อกำหนดวิธีให้อันดับ ค่าเริ่มต้นคือ 'average' โดยสมาชิกที่เท่ากันจะได้รับค่าเฉลี่ยของอันดับที่สมาชิกเหล่านั้นควรได้รับ

x <- c(10, 20, 20, 30)
# Default: average of positions 2 and 3 = 2.5
rank(x)
rank(x, ties.method = 'average')

วิธีจัดการค่าที่เท่ากัน: first และ last

ties.method = 'first' จะให้อันดับที่ต่ำกว่าแก่สมาชิกที่เท่ากันซึ่งปรากฏก่อนในเวกเตอร์ ส่วน 'last' จะทำตรงกันข้าม คือสมาชิกที่ปรากฏก่อนจะได้รับอันดับที่สูงกว่า

x <- c(10, 20, 20, 30)
cat('first:', rank(x, ties.method = 'first'), '\n')
cat('last: ', rank(x, ties.method = 'last'),  '\n')

วิธีจัดการค่าที่เท่ากัน: min และ max

'min' จะให้สมาชิกที่เท่ากันทั้งหมดได้รับอันดับต่ำสุดที่เป็นไปได้ (ใช้ในการแข่งขันกีฬา: ผู้เล่นสองคนที่เสมอกันในอันดับ 3 จะได้อันดับ 3 ทั้งคู่ และจะไม่มีใครได้อันดับ 4) ส่วน 'max' จะให้สมาชิกที่เท่ากันทั้งหมดได้รับอันดับสูงสุดที่เป็นไปได้

x <- c(10, 20, 20, 30)
cat('min:', rank(x, ties.method = 'min'), '\n')
cat('max:', rank(x, ties.method = 'max'), '\n')

วิธีจัดการค่าที่เท่ากัน: random

ties.method = 'random' จัดการค่าที่เท่ากันด้วยการสุ่มกำหนดอันดับที่แตกต่างกันให้สมาชิกเหล่านั้น การเรียกใช้แต่ละครั้งอาจให้ผลลัพธ์ต่างกัน เหมาะเมื่อคุณต้องการอันดับ integer ที่ไม่ซ้ำกัน แต่ไม่สนใจลำดับการตัดสินค่าที่เท่ากัน

x <- c(10, 20, 20, 20, 30)
set.seed(42)
cat('random run 1:', rank(x, ties.method = 'random'), '\n')
set.seed(99)
cat('random run 2:', rank(x, ties.method = 'random'), '\n')

การจัดอันดับแบบหนาแน่นเทียบกับการจัดอันดับมาตรฐาน

rank() ของ R สร้างการจัดอันดับแบบการแข่งขันมาตรฐาน (1, 2, 2, 4) หากต้องการการจัดอันดับแบบหนาแน่น (1, 2, 2, 3 — ไม่มีช่องว่าง) ให้ใช้ rank(x, ties.method = 'min') กับค่าที่ไม่ซ้ำกัน หรือใช้แพ็กเกจ data.table หรือ dplyr ต่อไปนี้คือตัวอย่างวิธีแก้ปัญหาด้วย R พื้นฐาน:

x <- c(10, 20, 20, 30)
# Standard ranking (gaps after ties)
cat('Standard:', rank(x, ties.method = 'min'), '\n')
# Dense ranking: rank of sorted unique values
dense <- match(x, sort(unique(x)))
cat('Dense:   ', dense, '\n')

rank() เทียบกับ order() และ sort()

ฟังก์ชันทั้งสามเกี่ยวข้องกัน แต่ส่งคืนค่าต่างชนิดกัน: sort(x) ส่งคืนค่าที่เรียงแล้ว, order(x) ส่งคืนตำแหน่งที่ใช้เรียงเวกเตอร์ และ rank(x) ส่งคืนอันดับของแต่ละตำแหน่ง ต่อไปนี้เป็นการเปรียบเทียบแบบเคียงข้างกัน

x <- c(30, 10, 50, 20, 40)
cat('x       :', x,        '\n')
cat('sort(x) :', sort(x),  '\n')
cat('order(x):', order(x), '\n')
cat('rank(x) :', rank(x),  '\n')

การจัดอันดับจากมากไปน้อย

หากต้องการจัดอันดับจากค่ามากไปหาค่าน้อย (อันดับ 1 = ค่าสูงสุด) ให้ทำเวกเตอร์เป็นค่าลบก่อนส่งให้ rank() นี่เป็นรูปแบบที่ใช้กับกระดานจัดอันดับ ซึ่งอันดับ 1 หมายถึงดีที่สุด

scores <- c(78, 92, 65, 88, 71)
desc_ranks <- rank(-scores)
cat('Scores:      ', scores,     '\n')
cat('Rank (best=1):', desc_ranks, '\n')

การเพิ่มอันดับลงในดาต้าเฟรม

งานที่พบบ่อยคือการเพิ่มคอลัมน์อันดับลงในดาต้าเฟรม ให้ใช้ rank() ร่วมกับ ties.method = 'min' และทำค่าเป็นลบเมื่อจัดอันดับจากมากไปน้อย เพื่อสร้างกระดานจัดอันดับที่ถูกต้อง

df <- data.frame(
  player = c('Alice', 'Bob', 'Carol', 'Dave'),
  score  = c(250, 400, 250, 375)
)
df$rank <- rank(-df$score, ties.method = 'min')
df[order(df$rank), ]

rank() กับค่า NA

rank() มีอาร์กิวเมนต์ na.last เช่นเดียวกับ sort() และ order() ค่าเริ่มต้นคือ 'keep' ซึ่งกำหนดอันดับเป็น NA ให้ค่าที่เป็น NA และจัดอันดับสมาชิกที่ไม่ใช่ NA แยกจากกัน

x <- c(5, NA, 2, NA, 8, 1)
cat('na.last=keep:  ', rank(x, na.last = 'keep'), '\n')
cat('na.last=TRUE:  ', rank(x, na.last = TRUE),   '\n')
cat('na.last=FALSE: ', rank(x, na.last = FALSE),  '\n')

อันดับเปอร์เซ็นไทล์

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

scores <- c(60, 75, 82, 91, 68, 77, 85, 95)
n <- length(scores)
pct_rank <- rank(scores) / n * 100
result <- data.frame(score = scores, percentile = round(pct_rank, 1))
result[order(result$score), ]

ตรวจสอบความเข้าใจ

ties.method แบบใดกำหนดให้สมาชิกที่มีค่าเท่ากันทั้งหมดมีอันดับต่ำสุดที่เป็นไปได้เหมือนกัน (เช่น ในการแข่งขันกีฬา ผู้เล่นสองคนได้อันดับ 3 ร่วมกัน และไม่มีใครได้อันดับ 4)

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

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

  • rank(x) ส่งคืนอันดับของสมาชิกแต่ละตัว (มีความยาวเท่ากับอินพุต)
  • ค่าเริ่มต้น ties.method = 'average': สมาชิกที่มีค่าเท่ากันใช้อันดับเฉลี่ยร่วมกัน
  • 'min' = รูปแบบการแข่งขันกีฬา (ใช้อันดับต่ำสุดร่วมกัน), 'max' = ใช้อันดับสูงสุดร่วมกัน
  • 'first' และ 'last' แก้กรณีค่าเท่ากันตามลำดับที่ปรากฏ
  • ใช้ rank(-x) เพื่อจัดอันดับจากมากไปน้อย (อันดับ 1 = ค่าสูงสุด)
  • เพิ่มคอลัมน์อันดับลงในดาต้าเฟรมด้วย df$rank <- rank(-df$score, ties.method='min')
x <- c(10, 30, 20, 30, 10)
cat('average:', rank(x, ties.method = 'average'), '\n')
cat('min:    ', rank(x, ties.method = 'min'),     '\n')
cat('max:    ', rank(x, ties.method = 'max'),     '\n')
cat('first:  ', rank(x, ties.method = 'first'),   '\n')

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

บทเรียน “การจัดอันดับค่าด้วย rank()” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การจัดอันดับค่าด้วย rank()”

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

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

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

บทเรียน “การจัดอันดับค่าด้วย rank()” ใช้เวลานานแค่ไหน

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

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

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

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

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