ترتيب القيم باستخدام rank()
عيّن الرتب باستخدام أساليب كسر التعادل: average وfirst وmin وmax وrandom.
ترتيب القيم باستخدام rank() درس مجاني في R Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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، ولا يحصل أحد على الرتبة 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، مع ترتيب العناصر غير المفقودة فيما بينها.
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 تمنح جميع العناصر المتساوية الرتبة نفسها، وهي أدنى رتبة ممكنة (كما في الرياضات، حيث يشترك لاعبان في المركز الثالث ولا يحصل أحد على المركز الرابع)؟
أهم النقاط حول 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')تعلم R مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 43
- الدروس
- 159
الأسئلة الشائعة
هل درس «ترتيب القيم باستخدام rank()» مجاني؟
نعم — نص درس «ترتيب القيم باستخدام rank()» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.
ماذا ستتعلم في «ترتيب القيم باستخدام rank()»؟
عيّن الرتب باستخدام أساليب كسر التعادل: average وfirst وmin وmax وrandom. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟
لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «ترتيب القيم باستخدام rank()»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟
نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- فرز المتجهات باستخدام sort()
- order() للترتيب المرن
- ترتيب القيم باستخدام rank()
- فرز إطارات البيانات حسب العمود