R Academy · درس

الملخّصات المجمّعة وgroup_by()

جمّع البيانات حسب المجموعات واحسب الإحصاءات لكل مجموعة.

الدرس 1 من 413 خطوة

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

لماذا نُجمّع البيانات؟

يُعد تجميع البيانات من أقوى العمليات في تحليل البيانات. فبدلًا من حساب الإحصاءات على مجموعة البيانات بأكملها، تحسبها داخل كل مجموعة. وتجعل حزمة dplyr ذلك بديهيًا باستخدام group_by() ثم summarize().

library(dplyr)

# Sample sales data
sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

print(sales)

أساسيات group_by()

تضع group_by(col) علامة على إطار البيانات بحيث تُنفذ العمليات اللاحقة لكل مجموعة. وهي لا تغيّر البيانات نفسها، بل تضيف بيانات وصفية للتجميع. ويمكنك التجميع حسب عمود واحد أو عدة أعمدة.

library(dplyr)

sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

# Group by region
grouped <- sales %>% group_by(region)
print(grouped)
print(group_keys(grouped))

‏summarize() بعد group_by()

تُحوّل summarize() (أو summarise()) كل مجموعة إلى صف واحد. وتحدد أسماء الأعمدة الجديدة ودوال التلخيص التي تريد تطبيقها. ومن الدوال الشائعة: n() وmean() وsum() وmin() وmax().

library(dplyr)

sales <- data.frame(
  region = c('North','North','South','South','East'),
  revenue = c(120, 95, 200, 175, 88),
  units = c(10, 8, 15, 12, 7)
)

sales %>%
  group_by(region) %>%
  summarize(
    n = n(),
    mean_revenue = mean(revenue),
    total_units = sum(units)
  )

العد باستخدام n()

تُعيد n() داخل summarize() عدد الصفوف في كل مجموعة. ولا تتطلب أي وسيطات. ولعد الصفوف التي تطابق شرطًا، استخدم sum(condition). أما n_distinct(col) فتحسب القيم الفريدة.

library(dplyr)

employees <- data.frame(
  dept = c('HR','HR','Eng','Eng','Eng','Sales'),
  salary = c(55000, 60000, 95000, 105000, 90000, 70000),
  senior = c(FALSE, TRUE, TRUE, TRUE, FALSE, FALSE)
)

employees %>%
  group_by(dept) %>%
  summarize(
    count = n(),
    senior_count = sum(senior),
    avg_salary = mean(salary)
  )

التجميع حسب عدة أعمدة

يمكنك تمرير عدة أعمدة إلى group_by(). وتتكون المجموعات من كل تركيبة من القيم الموجودة في البيانات. ويفيد ذلك في الجداول التقاطعية والتلخيصات الهرمية.

library(dplyr)

orders <- data.frame(
  region = c('North','North','South','South','North','South'),
  product = c('A','B','A','B','A','A'),
  sales = c(100, 200, 150, 250, 120, 180)
)

orders %>%
  group_by(region, product) %>%
  summarize(
    total_sales = sum(sales),
    orders = n(),
    .groups = 'drop'
  )

وسيطة .groups

بعد استخدام summarize()، تظل النتيجة مجمعة حسب جميع متغيرات التجميع باستثناء الأخير. وتتحكم وسيطة .groups في ذلك:

  • 'drop_last' — القيمة الافتراضية، تزيل آخر مستوى من مستويات التجميع
  • 'drop' — تزيل التجميع بالكامل
  • 'keep' — تحتفظ بكل مستويات التجميع
library(dplyr)

df <- data.frame(
  year = c(2022,2022,2023,2023),
  quarter = c('Q1','Q2','Q1','Q2'),
  revenue = c(100, 120, 130, 150)
)

# .groups = 'drop' ensures ungrouped result
result <- df %>%
  group_by(year, quarter) %>%
  summarize(total = sum(revenue), .groups = 'drop')

print(result)
print(is.grouped_df(result))  # FALSE

‏ungroup() صراحةً

يمكنك دائمًا استدعاء ungroup() لإزالة بيانات التجميع الوصفية من إطار البيانات. وهذا مهم عندما تريد أن تعمل العمليات اللاحقة على البيانات بأكملها، لا على كل مجموعة على حدة.

library(dplyr)

df <- data.frame(
  dept = c('HR','HR','Eng','Eng'),
  salary = c(55000, 60000, 95000, 105000)
)

# Without ungroup: rank is within group
df %>%
  group_by(dept) %>%
  mutate(rank_in_dept = rank(salary)) %>%
  ungroup() %>%
  mutate(rank_overall = rank(salary))

‏group_keys() وn_groups()

تُعيد group_keys() إطار بيانات يعرض تركيبات المجموعات الفريدة. وتخبرك n_groups() بعدد المجموعات الموجودة. وتفيد هاتان الدالتان في فحص البيانات قبل تنفيذ العمليات المجمعة.

library(dplyr)

df <- data.frame(
  country = c('US','US','UK','UK','DE'),
  category = c('A','B','A','A','B'),
  value = c(10, 20, 15, 25, 30)
)

grouped <- df %>% group_by(country, category)

cat('Number of groups:', n_groups(grouped), '\n')
print(group_keys(grouped))

التلخيص باستخدام إحصاءات متعددة

يمكنك حساب العديد من الإحصاءات الملخصة في استدعاء واحد لـsummarize(). فاجمع العدد والمتوسط والوسيط والانحراف المعياري والحد الأدنى والحد الأقصى والحسابات المخصصة دفعة واحدة.

library(dplyr)

scores <- data.frame(
  class = c('A','A','A','B','B','B','C','C'),
  score = c(85, 90, 78, 92, 88, 95, 70, 75)
)

scores %>%
  group_by(class) %>%
  summarize(
    n = n(),
    mean_score = round(mean(score), 1),
    median_score = median(score),
    sd_score = round(sd(score), 2),
    min_score = min(score),
    max_score = max(score)
  )

‏mutate() المدركة للمجموعات

تحسب mutate() بعد group_by() القيم داخل كل مجموعة، لكنها تحتفظ بجميع الصفوف (بخلاف summarize()). وهذا مثالي لحساب مقاييس على مستوى المجموعة وإرفاقها بكل صف.

library(dplyr)

sales <- data.frame(
  region = c('East','East','West','West','West'),
  rep = c('Alice','Bob','Carol','Dave','Eve'),
  revenue = c(150, 200, 120, 180, 160)
)

sales %>%
  group_by(region) %>%
  mutate(
    region_total = sum(revenue),
    pct_of_region = round(100 * revenue / sum(revenue), 1)
  ) %>%
  ungroup()

التصفية داخل المجموعات

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

library(dplyr)

sales <- data.frame(
  region = c('East','East','West','West','North','North'),
  rep = c('Alice','Bob','Carol','Dave','Eve','Frank'),
  revenue = c(150, 200, 120, 180, 95, 130)
)

# Keep the top rep per region
sales %>%
  group_by(region) %>%
  filter(revenue == max(revenue)) %>%
  ungroup()

تحقق سريع

ماذا تفعل الوسيطة .groups = 'drop' في summarize()؟

مراجعة: التلخيصات المجمعة

أهم النقاط المتعلقة بالتلخيصات المجمعة:

  • group_by(col) تضيف التجميع — لا تتغير البيانات، لكن تصبح العمليات مدركة للمجموعات
  • summarize() تختصر المجموعات إلى صف واحد لكل مجموعة — استخدم n() وmean() وsum() وغير ذلك
  • .groups = 'drop' تضمن أن تكون النتيجة غير مجمعة
  • ungroup() تزيل التجميع في أي وقت
  • group_keys() تفحص مستويات التجميع، وn_groups() تحسب عددها
  • تضيف mutate() مع group_by() أعمدة على مستوى المجموعة من دون اختصار الصفوف
library(dplyr)

# Full pipeline example
data.frame(
  dept = c('Eng','Eng','HR','HR','Sales'),
  salary = c(95000, 110000, 60000, 65000, 75000)
) %>%
  group_by(dept) %>%
  summarize(
    headcount = n(),
    avg_salary = mean(salary),
    .groups = 'drop'
  ) %>%
  arrange(desc(avg_salary))
البدء مجانًا

تعلم R مع معلم ذكاء اصطناعي — مجانًا

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

الدورات
43
الدروس
159

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

هل درس «الملخّصات المجمّعة وgroup_by()» مجاني؟

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

ماذا ستتعلم في «الملخّصات المجمّعة وgroup_by()»؟

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

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

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

كم من الوقت يستغرق درس «الملخّصات المجمّعة وgroup_by()»؟

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

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

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

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

  1. الملخّصات المجمّعة وgroup_by()
  2. دوال النوافذ: lag وlead وcumsum
  3. الربط بين جداول متعددة في dplyr
  4. التقييم المنظّم: {{ }} و.data
← العودة إلى R Academy