0Pricing
R Academy · درس

order() للترتيب المرن

احصل على تبديل الفهارس للفرز وفق معيار واحد أو عدة معايير.

order() للترتيب المرن درس مجاني في R Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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), ]

ترتيب متعدد مختلط تصاعديًا وتنازليًا

لترتيب عمود تصاعديًا وآخر تنازليًا، اعكس العمود الرقمي التنازلي باستخدام -. أما أعمدة المحارف، فاستخدم 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')

ترتيب إطار بيانات حسب عمود نصي

يمكنك الترتيب حسب أعمدة المحارف أيضًا. تعيد order(df$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() للترتيب المرن» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «order() للترتيب المرن»؟

احصل على تبديل الفهارس للفرز وفق معيار واحد أو عدة معايير. تتمرن على R Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ R Academy؟

لا تُشترط خبرة سابقة. R Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «order() للترتيب المرن»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس R Academy هذا؟

نعم. كل درس في R Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. فرز المتجهات باستخدام sort()
  2. order() للترتيب المرن
  3. ترتيب القيم باستخدام rank()
  4. فرز إطارات البيانات حسب العمود
← العودة إلى R Academy