0Pricing
R Academy · درس

فرز إطارات البيانات حسب العمود

افرز إطارات البيانات بالكامل باستخدام order() وarrange() في dplyr.

فرز إطارات البيانات حسب العمود درس مجاني في R Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في R Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة R Academy 4 دروس في المجموع.

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

الطريقة القياسية في R الأساسي لفرز إطار بيانات هي استخدام order() على العمود المطلوب، ثم استخدام الفهارس الناتجة لإعادة ترتيب الصفوف. تحدد الفاصلة بعد الفهارس جميع الأعمدة.

df <- data.frame(
  name = c('Charlie', 'Alice', 'Bob', 'Diana'),
  age  = c(35, 28, 42, 31),
  salary = c(55000, 48000, 72000, 61000)
)
df[order(df$age), ]

الفرز تنازليًا باستخدام عكس الإشارة

بالنسبة إلى الأعمدة الرقمية، اعكس إشارة العمود داخل order() لعكس اتجاه الفرز. تعكس علامة الطرح جميع القيم، بحيث تصبح القيمة العظمى سابقًا هي القيمة الصغرى لأغراض الترتيب.

df <- data.frame(
  name   = c('Charlie', 'Alice', 'Bob', 'Diana'),
  salary = c(55000, 48000, 72000, 61000)
)
# Highest salary first
df[order(-df$salary), ]

الفرز حسب عدة أعمدة

مرّر عدة أعمدة إلى order() للفرز وفق معيار أساسي ثم معايير ثانوية. يكسر الوسيط الثاني حالات التعادل في الوسيط الأول. وهذا يحاكي ORDER BY col1, col2 في SQL.

df <- data.frame(
  dept   = c('Eng', 'HR', 'Eng', 'HR', 'Eng'),
  name   = c('Zara', 'Bob', 'Alice', 'Eve', 'Mike'),
  salary = c(90000, 55000, 85000, 58000, 78000)
)
# Sort by dept, then by salary descending within dept
df[order(df$dept, -df$salary), ]

فرز أعمدة المحارف

يعمل الفرز حسب عمود محارف بالطريقة نفسها — إذ تتولى order() الترتيب المعجمي. وللترتيب الأبجدي العكسي، استخدم decreasing = TRUE بدلًا من عكس الإشارة (فعكس الإشارة لا يعمل إلا مع القيم الرقمية).

df <- data.frame(
  city    = c('Paris', 'Athens', 'Berlin', 'London'),
  pop_mil = c(2.1, 0.6, 3.6, 9.0)
)
# Alphabetical by city
df[order(df$city), ]
# Reverse alphabetical
df[order(df$city, decreasing = TRUE), ]

إعادة ضبط أرقام الصفوف بعد الفرز

بعد الفرز، تعكس أسماء الصفوف المواضع الأصلية (مثلًا: 3، 1، 4، 2). لإعادة ضبطها إلى أعداد صحيحة متسلسلة تبدأ من 1، عيّن row.names(df) <- NULL أو غلّف النتيجة باستخدام data.frame().

df <- data.frame(
  x = c(30, 10, 20),
  y = c('c', 'a', 'b')
)
sorted <- df[order(df$x), ]
cat('Before reset:\n'); print(sorted)
row.names(sorted) <- NULL
cat('After reset:\n');  print(sorted)

الفرز مع قيم NA

عندما يحتوي عمود الفرز على NA، تضعها order() في النهاية افتراضيًا. استخدم na.last = FALSE لنقل صفوف NA إلى الأعلى، أو صفِّها أولًا.

df <- data.frame(
  name  = c('Alice', 'Bob', 'Carol', 'Dave'),
  score = c(85, NA, 92, NA)
)
cat('NAs last (default):\n')
print(df[order(df$score), ])
cat('NAs first:\n')
print(df[order(df$score, na.last = FALSE), ])

‏dplyr::arrange() كبديل حديث

توفر حزمة dplyr الدالة arrange() كبديل أبسط. وعلى الرغم من أن dplyr ليست جزءًا من R الأساسي، فإن معرفة صياغتها تساعدك على قراءة شيفرة R الحديثة. ملاحظة: قيمة isRunnable هي true هنا فقط لعرض الصياغة — يجب تثبيت dplyr لتشغيلها.

# dplyr::arrange() syntax (requires dplyr installed)
# library(dplyr)
# df |> arrange(salary)           # ascending
# df |> arrange(desc(salary))     # descending
# df |> arrange(dept, desc(salary)) # multi-column

# Equivalent base R:
df <- data.frame(dept=c('A','B','A'), salary=c(50,70,60))
df[order(df$dept, -df$salary), ]

فرز العوامل حسب ترتيب المستويات

تُفرز أعمدة العوامل حسب ترتيب مستوياتها، وليس ترتيبها الأبجدي. يتيح لك ذلك تحديد ترتيب فرز مخصص عن طريق ضبط مستويات العامل صراحةً قبل الفرز.

df <- data.frame(
  priority = factor(c('Low', 'High', 'Medium', 'High', 'Low'),
                    levels = c('Low', 'Medium', 'High')),
  task = c('T1', 'T2', 'T3', 'T4', 'T5')
)
# Sorts by factor level (Low < Medium < High)
df[order(df$priority), ]

فرز الصفوف واختيار الصفوف العليا

من الأنماط الشائعة فرز إطار بيانات ثم أخذ أول N صفوف باستخدام head()، أو آخر N صفوف باستخدام tail(). وهذا هو المقابل في R الأساسي لعبارة ORDER BY ... LIMIT N في SQL.

df <- data.frame(
  product = c('A', 'B', 'C', 'D', 'E'),
  revenue = c(1200, 4500, 890, 3100, 2750)
)
# Top 3 by revenue
top3 <- head(df[order(-df$revenue), ], 3)
row.names(top3) <- NULL
print(top3)

الفرز الموضعي مقابل الفرز المُسنَد

لا يغيّر الفرز إطار البيانات الأصلي — بل يُرجع إطارًا جديدًا. احرص دائمًا على إسناد النتيجة إلى متغير (إما متغير جديد أو المتغير الأصلي). لا بأس بالكتابة فوق الأصل عندما تنتهي من الإصدار غير المرتب.

df <- data.frame(
  x = c(3, 1, 4, 1, 5, 9),
  y = c('c', 'a', 'd', 'b', 'e', 'i')
)
# Safe: assign to new variable
df_sorted <- df[order(df$x), ]
# Or overwrite original:
df <- df[order(df$x), ]
row.names(df) <- NULL
print(df)

سير عمل كامل للفرز

فيما يلي سير عمل كامل وواقعي لفرز إطار بيانات: فرز الموظفين حسب اسم القسم تصاعديًا ثم حسب الراتب تنازليًا، وإعادة ضبط فهارس الصفوف، وعرض النتيجة بطريقة واضحة.

employees <- data.frame(
  name   = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
  dept   = c('IT', 'HR', 'IT', 'HR', 'IT'),
  salary = c(85000, 58000, 92000, 63000, 78000)
)
result <- employees[order(employees$dept, -employees$salary), ]
row.names(result) <- NULL
print(result)

تحقق سريع

كيف تفرز إطار البيانات df حسب العمود الرقمي df$salary ترتيبًا تنازليًا باستخدام R الأساسي؟

فرز إطارات البيانات: أهم النقاط

أهم النقاط حول فرز إطارات البيانات:

  • الصياغة الشائعة في R الأساسي: df[order(df$col), ]
  • الترتيب التنازلي للقيم الرقمية: اعكس الإشارة باستخدام - داخل order(-df$col)
  • الترتيب التنازلي للمحارف: استخدم الوسيط decreasing = TRUE
  • الفرز حسب عدة أعمدة: order(df$a, df$b) — يكسر الفرز الثانوي حالات التعادل
  • تُفرز العوامل حسب ترتيب مستوياتها المحدد، وليس أبجديًا
  • أعد ضبط أسماء الصفوف باستخدام row.names(df) <- NULL بعد الفرز
  • البديل الحديث: dplyr::arrange() مع desc() للترتيب التنازلي
df <- data.frame(
  name = c('Zara', 'Ana', 'Bob', 'Ana'),
  score = c(90, 85, 92, 88)
)
# Sort by name asc, score desc
result <- df[order(df$name, -df$score), ]
row.names(result) <- NULL
print(result)

الأسئلة الشائعة

هل درس «فرز إطارات البيانات حسب العمود» مجاني؟

نعم — نص درس «فرز إطارات البيانات حسب العمود» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة R Academy، انتقل إلى CoddyKit PRO. تتضمن دورة R Academy 4 دروس في المجموع.

ماذا ستتعلم في «فرز إطارات البيانات حسب العمود»؟

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

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

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

كم من الوقت يستغرق درس «فرز إطارات البيانات حسب العمود»؟

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

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

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

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

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