دالة التجميع في لغة R: مثال على دالتي summarise() و group_by()

⚡ ملخص ذكي

تُدمج دالة التجميع في لغة R باستخدام مكتبة dplyr العديد من الصفوف في إحصائية واحدة لكل مجموعة. يشرح هذا الدليل كيفية استخدام دالة group_by() مع دالة summarise() على بيانات لاهمن الخاصة بالضرب لحساب المتوسطات، والمجاميع، والانتشار، والعدد، والقيم الموضعية عبر 104,324 مشاهدة.

  • 🧮 الفعل الأساسي: تقوم الدالة summarise(df, name = function(column)) بإرجاع صف واحد، وتقوم الدالة group_by() أولاً بتحويل ذلك إلى صف واحد لكل مجموعة.
  • 📊 عائلات الإحصائيات: يصف المتوسط ​​والوسيط المركز، ويصف الانحراف المعياري والمدى الربيعي التشتت، ويصف الحد الأدنى والحد الأقصى المدى.
  • 🔢 عد: تقوم الدالة n() بحساب عدد الصفوف في المجموعة الحالية، بينما تقوم الدالة n_distinct() بحساب القيم الفريدة داخلها.
  • 📍 المساعدون الموضعيون: first() و last() و nth() مثالtracملاحظة محددة من كل مجموعة.
  • 🔄 العمل متعدد الأعمدة: تقوم الدالة across() بتطبيق دالة واحدة على العديد من الأعمدة دون تكرار الكود لكل عمود.
  • 🔓 الحبوping النظافة: قم دائمًا باستدعاء الدالة ungroup() قبل إجراء عملية حسابية يجب أن تُنفذ على الجدول بأكمله مرة أخرى.

R الدالة الإجمالية

مجموعة البيانات المستخدمة في هذا البرنامج التعليمي

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

يستخدم هذا البرنامج التعليمي مجموعة بيانات لاهمن للضرب. بعد استيرادها، احتفظ بهاping يحتوي إطار البيانات العامل، الذي يتضمن الأعمدة التسعة المدرجة أدناه فقط، على 104,324 مشاهدة و9 متغيرات:

  • معرف اللاعب: رمز معرف اللاعب. عامل
  • معرف السنة: السنة. عامل
  • معرف الفريق: الفريق. عامل
  • معرف إل جي: الدوري. العامل: AA AL FL NL PL UA
  • أ.ب: عند الخفافيش. رقمي
  • G: الألعاب: عدد المباريات التي لعبها اللاعب. رقمي
  • ر: يركض. رقمي
  • الموارد البشرية: homeruns. رقمي
  • ش: ضربات التضحية. رقمي

قبل أن تقوم بإجراء الملخص، سوف تقوم بالخطوات التالية لإعداد البيانات:

  • الخطوة 1: استيراد البيانات
  • الخطوة 2: حدد المتغيرات ذات الصلة
  • الخطوة 3: فرز البيانات
library(dplyr)

# Step 1
data <- read.csv("https://raw.githubusercontent.com/guru99-edu/R-Programming/master/lahman-batting.csv") %>%

# Step 2
select(c(playerID, yearID, AB, teamID, lgID, G, R, HR, SH))  %>% 

# Step 3
arrange(playerID, teamID, yearID)

من الممارسات الجيدة عند استيراد مجموعة بيانات استخدام الدالة glimpse() للحصول على فكرة حول بنية مجموعة البيانات.

# Structure of the data
glimpse(data)

الإخراج:

Observations: 104,324
Variables: 9
$ playerID <fctr> aardsda01, aardsda01, aardsda01, aardsda01, aardsda01, a...
$ yearID   <int> 2015, 2008, 2007, 2006, 2012, 2013, 2009, 2010, 2004, 196...
$ AB       <int> 1, 1, 0, 2, 0, 0, 0, 0, 0, 603, 600, 606, 547, 516, 495, ...
$ teamID   <fctr> ATL, BOS, CHA, CHN, NYA, NYN, SEA, SEA, SFN, ATL, ATL, A...
$ lgID     <fctr> NL, AL, AL, NL, AL, NL, AL, AL, NL, NL, NL, NL, NL, NL, ...
$ G        <int> 33, 47, 25, 45, 1, 43, 73, 53, 11, 158, 155, 160, 147, 15...
$ R        <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 113, 84, 100, 103, 95, 75...
$ HR       <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 39, 29, 44, 38, 47, 34, 40...
$ SH       <int> 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, ...

ملخص()

إن بناء جملة summarise() أساسي ومتوافق مع الأفعال الأخرى المضمنة في مكتبة dplyr.

summarise(df, variable_name=condition) 
arguments: 
- `df`: Dataset used to construct the summary statistics 
- `variable_name=condition`: Formula to create the new variable

انظر إلى الكود أدناه:

summarise(data, mean_run =mean(R))

Code تفسير

  • ملخص (data، mean_run = mean(R)): ينشئ متغيرًا باسم mean_run وهو متوسط ​​تشغيل العمود من مجموعة البيانات data.

الإخراج:

##   mean_run
## 1 19.20114

يمكنك إضافة أي عدد تريده من المتغيرات. يمكنك إرجاع متوسط ​​الألعاب التي لعبتها ومتوسط ​​عدد التضحيات.

summarise(data, mean_games = mean(G),
    mean_SH = mean(SH, na.rm = TRUE))

Code تفسير

  • mean_SH = mean(SH, na.rm = TRUE): تلخيص متغير ثانٍ. يمكنك تعيين na.rm = TRUE لأن العمود SH يحتوي على ملاحظات مفقودة.

الإخراج:

##   mean_games  mean_SH
## 1   51.98361 2.340085

group_by() مقابل عدم استخدام group_by()

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

لاحظ أن group_by يعمل بشكل مثالي مع جميع الأفعال الأخرى (على سبيل المثال، mutate()، filter()، الترتيب()، ...).

من الملائم استخدام مشغل خط الأنابيب عندما يكون لديك أكثر من خطوة. يمكنك حساب متوسط ​​الضربات المنزلية حسب دوري البيسبول.

data %>%
	group_by(lgID) %>%
	summarise(mean_run = mean(HR))

Code تفسير

  • البيانات: مجموعة البيانات المستخدمة لإنشاء الإحصائيات الموجزة
  • group_by(lgID): قم بتقسيم البيانات حسب قيم lgID قبل تلخيصها
  • تلخيص(متوسط ​​الجري = متوسط ​​(HR)): احسب متوسط ​​الجري المنزلي

الإخراج:

## 
# A tibble: 7 x 2
##     lgID  mean_run
##   <fctr>     <dbl>
## 1     AA 0.9166667
## 2     AL 3.1270988
## 3     FL 1.3131313
## 4     NL 2.8595953
## 5     PL 2.5789474
## 6     UA 0.6216216
## 7   <NA> 0.2867133	

تعمل هذه الخاصية مع دالة ggplot() أيضًا، لذا تبقى سلسلة العمليات كاملةً، من البيانات الأولية إلى الرسم البياني النهائي، ضمن عبارة واحدة. يجمع الكود أدناه بين دوال group_by() و summarise() و ggplot() لعرض متوسط ​​عدد الضربات المنزلية لكل دوري في رسم بياني شريطي.

سوف تقوم بالخطوة التالية:

  • الخطوة 1: حدد إطار البيانات
  • الخطوة 2: بيانات المجموعة
  • الخطوة 3: تلخيص البيانات
  • الخطوة 4: رسم إحصائيات الملخص
library(ggplot2)
# Step 1
data %>% 
#Step 2
group_by(lgID) %>% 
#Step 3
summarise(mean_home_run = mean(HR)) %>% 
#Step 4
ggplot(aes(x = lgID, y = mean_home_run, fill = lgID)) +
    geom_bar(stat = "identity") +
    theme_classic() +
    labs(
        x = "baseball league",
        y = "Average home run",
        title = paste(
            "Example group_by() with summarise()"
        )
    )

الإخراج:

مثال على Group_by مع تلخيص

الدوال التي يمكنك استخدامها داخل دالة summarise()

الفعل summarise() متوافق مع جميع الدوال تقريبًا في R. فيما يلي قائمة قصيرة بالوظائف المفيدة التي يمكنك استخدامها مع summarise():

الهدف الوظيفة الوصف
خفيف تعني() متوسط ​​المتجه x
الوسيط() متوسط ​​المتجه x
المبلغ () مجموع المتجهات x
اختلاف SD () الانحراف المعياري للمتجه x
معدل الذكاء () الربعي للمتجه x
المدى دقيقة () الحد الأدنى من المتجه x
ماكس () الحد الأقصى للناقل x
كمية () كمية المتجه x
الموقع الحالي أولاً() استخدم مع group_by() الملاحظة الأولى للمجموعة
آخر() استخدم مع group_by(). الملاحظة الأخيرة للمجموعة
نث () استخدم مع group_by(). الملاحظة التاسعة للمجموعة
العد التنازلي ن() استخدم مع group_by(). حساب عدد الصفوف
n_distinct() استخدم مع group_by(). حساب عدد الملاحظات المتميزة

تشرح الأقسام التالية مثالاً لكل وظيفة في الجدول أعلاه. إذا كنت جديدًا على استخدام الأنابيب والأفعال الأخرى، فابدأ بـ دليل الاختيار والتصفية والترتيب.

الوظيفة الأساسية

في المثال السابق، لم تقم بتخزين إحصائيات الملخص في إطار البيانات.

يمكنك إنشاء إطار بيانات من ملخص في خطوتين:

  • الخطوة 1: قم بتخزين إطار البيانات لمزيد من الاستخدام
  • الخطوة 2: استخدم مجموعة البيانات لإنشاء مخطط خطي

الخطوة 1) تحسب متوسط ​​عدد الألعاب التي تم لعبها حسب السنة.

## Mean
ex1 <- data %>%
	group_by(yearID) %>%
	summarise(mean_game_year = mean(G))
head(ex1)

Code تفسير

  • يتم تخزين الإحصائيات الموجزة لمجموعة بيانات الضرب في إطار البيانات ex1.

الإخراج:

## # A tibble: 6 x 2
##   yearID mean_game_year
##    <int>          <dbl>
## 1   1871       23.42308
## 2   1872       18.37931
## 3   1873       25.61538
## 4   1874       39.05263
## 5   1875       28.39535
## 6   1876       35.90625	

الخطوة 2) يمكنك إظهار إحصائيات الملخص باستخدام مخطط خطي ورؤية الاتجاه.

# Plot the graph
ggplot(ex1, aes(x = yearID, y = mean_game_year)) +
    geom_line() +
    theme_classic() +
    labs(
        x = "Year",
        y = "Average games played",
        title = paste(
            "Average games played from 1871 to 2016"
        )
    )

الإخراج:

مثال الوظيفة الأساسية

التقليل

تعتبر وظيفة summarise() متوافقة مع التجزئة.

## Subsetting + Median
data %>%
group_by(lgID) %>%
summarise(median_at_bat_league = median(AB), 
	#Compute the median without the zero 
	median_at_bat_league_no_zero = median(AB[AB > 0]))

Code تفسير

  • median_at_bat_league_no_zero = median(AB[AB > 0]): يحتوي المتغير AB على الكثير من 0. يمكنك مقارنة متوسط في الخفافيش متغير مع وبدون 0.

الإخراج:

## # A tibble: 7 x 3
##     lgID median_at_bat_league median_at_bat_league_no_zero
##   <fctr>                <dbl>                        <dbl>
## 1     AA                  130                          131
## 2     AL                   38                           85
## 3     FL                   88                           97
## 4     NL                   56                           67
## 5     PL                  238                          238
## 6     UA                   35                           35
## 7   <NA>                  101                          101	

مجموع

وظيفة أخرى مفيدة لتجميع المتغير هي sum ().

يمكنك التحقق من الدوريات التي لديها عدد أكبر من اللاعبين.

## Sum
data %>%
	group_by(lgID) %>%
	summarise(sum_homerun_league = sum(HR))

الإخراج:

## # A tibble: 7 x 2
##     lgID sum_homerun_league
##   <fctr>              <int>
## 1     AA                341
## 2     AL              29426
## 3     FL                130
## 4     NL              29817
## 5     PL                 98
## 6     UA                 46
## 7   <NA>                 41	

الانحراف المعياري

يتم حساب الانتشار في البيانات باستخدام الانحراف المعياري أو sd() في R.

# Spread
data %>%
	group_by(teamID) %>%
	summarise(sd_at_bat_league = sd(HR))

الإخراج:

## # A tibble: 148 x 2
##    teamID sd_at_bat_league
##    <fctr>            <dbl>
##  1    ALT               NA
##  2    ANA        8.7816395
##  3    ARI        6.0765503
##  4    ATL        8.5363863
##  5    BAL        7.7350173
##  6    BFN        1.3645163
##  7    BFP        0.4472136
##  8    BL1        0.6992059
##  9    BL2        1.7106757
## 10    BL3        1.0000000
## # ... with 138 more rows		

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

الحد الأدنى والحد الأقصى

يمكنك الوصول إلى الحد الأدنى والحد الأقصى للمتجه باستخدام الدالة min() وmax().

يقوم الكود أدناه بإرجاع أقل وأعلى عدد من الألعاب في الموسم الذي يلعبه اللاعب.

# Min and max
data %>%
	group_by(playerID) %>%
	summarise(min_G = min(G),
    max_G = max(G))

الإخراج:

## # A tibble: 10,395 x 3
##     playerID min_G max_G
##       <fctr>       <int>
##  1 aardsda01    53    73
##  2 aaronha01   120   156
##  3  aasedo01    24    66
##  4  abadfe01    18    18
##  5 abadijo01    11    11
##  6 abbated01     3   153
##  7 abbeybe01    11    11
##  8 abbeych01    80   132
##  9 abbotgl01     5    23
## 10 abbotji01    13    29
## # ... with 10,385 more rows

العد التنازلي

يُعدّ حساب عدد المشاهدات لكل مجموعة أمرًا مفيدًا دائمًا. في لغة R، تُعيد الدالة n() عدد الصفوف في المجموعة الحالية.

على سبيل المثال، يقوم الكود أدناه بحساب عدد السنوات التي لعبها كل لاعب.

# count observations
data %>%
	group_by(playerID) %>%
	summarise(number_year = n()) %>%
	arrange(desc(number_year))

الإخراج:

## # A tibble: 10,395 x 2
##     playerID number_year
##       <fctr>       <int>
##  1 pennohe01          11
##  2 joosted01          10
##  3 mcguide01          10
##  4  rosepe01          10
##  5 davisha01           9
##  6 johnssi01           9
##  7  kaatji01           9
##  8 keelewi01           9
##  9 marshmi01           9
## 10 quirkja01           9
## # ... with 10,385 more rows

أولا و أخيرا

يمكنك تحديد الموضع الأول أو الأخير أو التاسع للمجموعة.

على سبيل المثال، يمكنك العثور على السنة الأولى والأخيرة لكل لاعب.

# first and last
data %>%
	group_by(playerID) %>%
	summarise(first_appearance = first(yearID),
		last_appearance = last(yearID))

الإخراج:

## # A tibble: 10,395 x 3
##     playerID first_appearance last_appearance
##       <fctr>            <int>           <int>
##  1 aardsda01             2009            2010
##  2 aaronha01             1973            1975
##  3  aasedo01             1986            1990
##  4  abadfe01             2016            2016
##  5 abadijo01             1875            1875
##  6 abbated01             1905            1897
##  7 abbeybe01             1894            1894
##  8 abbeych01             1895            1897
##  9 abbotgl01             1973            1979
## 10 abbotji01             1992            1996
## # ... with 10,385 more rows

الملاحظة ن

تُكمل الدالة nth() الدالتين first() و last(). وهي تُعيد الملاحظة الموجودة في الفهرس الذي تُمرره داخل كل مجموعة.

على سبيل المثال، يمكنك تصفية السنة الثانية فقط التي لعب فيها الفريق.

# nth
data %>%
	group_by(teamID) %>%
	summarise(second_game = nth(yearID, 2)) %>%
	arrange(second_game)

الإخراج:

## # A tibble: 148 x 2
##    teamID second_game
##    <fctr>       <int>
##  1    BS1        1871
##  2    CH1        1871
##  3    FW1        1871
##  4    NY2        1871
##  5    RC1        1871
##  6    BR1        1872
##  7    BR2        1872
##  8    CL1        1872
##  9    MID        1872
## 10    TRO        1872
## # ... with 138 more rows

عدد مميز من الملاحظات

تُعيد الدالة n() عدد الصفوف في المجموعة الحالية. أما الدالة n_distinct() المرتبطة بها فتحسب القيم الفريدة بدلاً من ذلك.

في المثال التالي، تقوم بجمع إجمالي اللاعبين الذين قام الفريق بتجنيدهم خلال جميع الفترات.

# distinct values
data %>%
	group_by(teamID) %>%
	summarise(number_player = n_distinct(playerID)) %>%
	arrange(desc(number_player))

Code تفسير

  • group_by(teamID): التجميع حسب الفريق
  • تلخيص(number_player = n_distinct(معرف اللاعب)): عدد اللاعبين المميزين لكل فريق
  • ترتيب(desc(number_player)): فرز البيانات حسب عدد اللاعب

الإخراج:

## # A tibble: 148 x 2
##    teamID number_player
##    <fctr>         <int>
##  1    CHN           751
##  2    SLN           729
##  3    PHI           699
##  4    PIT           683
##  5    CIN           679
##  6    BOS           647
##  7    CLE           646
##  8    CHA           636
##  9    DET           623
## 10    NYA           612
## # ... with 138 more rows

مجموعات متعددة

يمكن تحقيق إحصائية موجزة بين مجموعات متعددة.

# Multiple groups
data %>%
	group_by(yearID, teamID) %>%
	summarise(mean_games = mean(G)) %>%
	arrange(desc(teamID, yearID))

Code تفسير

  • group_by(yearID, teamID): المجموعة حسب السنة و فريق
  • summarise(mean_games = mean(G)): حساب متوسط ​​عدد الألعاب التي تم لعبها
  • ترتيب (desc(teamID, yearID)): فرز البيانات حسب الفريق والسنة

الإخراج:

## # A tibble: 2,829 x 3
## # Groups:   yearID [146]
##    yearID teamID mean_games
##     <int> <fctr>      <dbl>
##  1   1884    WSU   20.41667
##  2   1891    WS9   46.33333
##  3   1886    WS8   22.00000
##  4   1887    WS8   51.00000
##  5   1888    WS8   27.00000
##  6   1889    WS8   52.42857
##  7   1884    WS7    8.00000
##  8   1875    WS6   14.80000
##  9   1873    WS5   16.62500
## 10   1872    WS4    4.20000
## # ... with 2,819 more rows

تصفية

قبل أن تنوي إجراء عملية، يمكنك تصفية مجموعة البيانات. تبدأ مجموعة البيانات في عام 1871، ولا يحتاج التحليل إلى السنوات السابقة لعام 1980.

# Filter
data %>%
	filter(yearID > 1980) %>%
	group_by(yearID) %>%
	summarise(mean_game_year = mean(G))

Code تفسير

  • عامل التصفية (yearID > 1980): تصفية البيانات لإظهار السنوات ذات الصلة فقط (أي بعد عام 1980)
  • group_by(yearID): المجموعة حسب السنة
  • تلخيص(متوسط ​​سنة اللعبة = متوسط ​​(G)): تلخيص البيانات

الإخراج:

## # A tibble: 36 x 2
##    yearID mean_game_year
##     <int>          <dbl>
##  1   1981       40.64583
##  2   1982       56.97790
##  3   1983       60.25128
##  4   1984       62.97436
##  5   1985       57.82828
##  6   1986       58.55340
##  7   1987       48.74752
##  8   1988       52.57282
##  9   1989       58.16425
## 10   1990       52.91556
## # ... with 26 more rows

فك التجميع

وأخيرًا، يجب عليك إزالة المجموعةping قبل تغيير المستوى الذي تُجرى عنده العملية الحسابية. بدون دالة ungroup()، ستظل دالة summarise() الثانية تعمل لكل لاعب على حدة.

# Ungroup the data
data %>%
	filter(HR > 0) %>%
	group_by(playerID) %>%
	summarise(average_HR_game = sum(HR) / sum(G)) %>%
	ungroup() %>%
	summarise(total_average_homerun = mean(average_HR_game))

Code تفسير

  • filter(HR >0) : استبعاد الصفر homerun
  • group_by(playerID): المجموعة حسب اللاعب
  • تلخيص (متوسط ​​ضربات القلب في اللعبة = مجموع ضربات القلب في اللعبة)/مجموع ضربات القلب في اللعبة): احسب متوسط ​​ضربات القلب في اللعبة لكل لاعب
  • ungroup(): إزالة المجموعةping
  • تلخيص (total_average_homerun = mean(average_HR_game)): تلخيص البيانات

الإخراج:

## # A tibble: 1 x 1
##   total_average_homerun
##                   <dbl>
## 1            0.06882226	

كيفية تلخيص أعمدة متعددة باستخدام الدالة across()

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

# One function, several columns
data %>%
    group_by(lgID) %>%
    summarise(across(c(R, HR, G), mean, .names = "mean_{.col}"))

# Every numeric column at once
data %>%
    group_by(lgID) %>%
    summarise(across(where(is.numeric), mean, na.rm = TRUE))

# Several functions applied to several columns
data %>%
    group_by(teamID) %>%
    summarise(across(c(R, HR), list(avg = mean, total = sum)))

ثلاثة عوامل تتحكم في السلوك:

  • .cols: الأعمدة المراد العمل عليها، مكتوبة بنفس الأدوات المساعدة مثل select()، بما في ذلك where(is.numeric).
  • .fns: دالة واحدة، أو قائمة مسماة من الدوال لتطبيقها على كل عمود.
  • .names: نمط التسمية للإخراج، حيث {.col} هو العمود و {.fn} هو اسم الدالة.

تم استبدال الدالة across() بالدوال المساعدة القديمة summarise_all() و summarise_at() و summarise_if() في dplyr 1.0.0. لا تزال تلك الدوال تعمل ولكن تم استبدالها، لذلك يجب على التعليمات البرمجية الجديدة استخدام across().

أخطاء شائعة في دالة summarise() وكيفية إصلاحها

تُعزى معظم حالات فشل عمليات التجميع إلى أربع مشكلات.

  • النتيجة غير متوفرة. تُرجع الدالتان mean() و sum() القيمة NA إذا كانت أي قيمة مفقودة. أضف na.rm = TRUE، كما هو الحال في مثال mean_SH أعلاه.
  • رسالة "summarise() has grouped output". الحبوping يؤدي استخدام متغيرين إلى تجميع النتائج حسب المتغير الأول. مرر .groups = “drop” لإزالة المجموعةpingأو قم باستدعاء الدالة ungroup() بعد ذلك.
  • أظهرت حسابات لاحقة مستوى خاطئاً. تبقى مجموعة البيانات مُجمّعة حتى يتم فك تجميعها، لذا يتم تنفيذ دالة `summarise()` ثانية لكل مجموعة. وهذا ما يوضحه مثال `ungroup()` تحديدًا.
  • يحتوي الناتج على صفوف أكثر من المتوقع. تُرجع الدالة summarise() صفًا واحدًا لكل مجموعة، لذا فإن المجموعة غير المقصودةping يُضاعف المتغير الناتج. تحقق من سطر "المجموعات:" المطبوع أعلى أي جدول بيانات.
# Drop the grouping as part of the call
data %>%
    group_by(yearID, teamID) %>%
    summarise(mean_games = mean(G), .groups = "drop")

دالة summarise() في لغة R: مرجع الدالة

للحصول على ملخص حسب المجموعة، قم بتقسيم البيانات أولاً:

# group by X1, X2, X3
group_by(df, X1, X2, X3)

وأزل الجروping عندما يتغير مستوى الحساب:

ungroup(df)

يسرد الجدول أدناه جميع الدوال المستخدمة مع الدالة summarise() في هذا البرنامج التعليمي:

الأسلوب الوظيفة Code
تعني تعني
summarise(df, mean_x1 = mean(x1))
متوسط متوسط
summarise(df, median_x1 = median(x1))
مجموع مجموع
summarise(df, sum_x1 = sum(x1))
الانحراف المعياري sd
summarise(df, sd_x1 = sd(x1))
بين ربعي معدل الذكاء
summarise(df, interquartile_x1 = IQR(x1))
الحد الأدنى دقيقة
summarise(df, minimum_x1 = min(x1))
أقصى ماكس
summarise(df, maximum_x1 = max(x1))
كمية كمية
summarise(df, quantile_x1 = quantile(x1, probs = 0.75))
الملاحظة الأولى أول
summarise(df, first_x1 = first(x1))
الملاحظة الأخيرة آخر
summarise(df, last_x1 = last(x1))
الملاحظة ن نطة
summarise(df, nth_x1 = nth(x1, 2))
عدد الحدوث n
summarise(df, n_x1 = n())
عدد من حدوث متميزة n_distinct
summarise(df, n_distinct_x1 = n_distinct(x1))

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

تقوم الدالة summarise() بدمج كل مجموعة في صف واحد من الإحصائيات. أما الدالة mutate() فتحتفظ بكل صف وتضيف عمودًا جديدًا. استخدم الدالة mutate() عندما يجب أن تظهر إحصائية المجموعة بجانب المشاهدات الأصلية.

الحبوping يؤدي استخدام متغيرين أو أكثر إلى تجميع النتائج حسب جميع المتغيرات باستثناء المتغير الأخير. يُصدر dplyr تحذيرًا لأن الأفعال اللاحقة ستُنفذ بشكل صامت لكل مجموعة. مرر .groups = “drop” لتجنب ذلك.

تحسب الدالة n() عدد كل صف في المجموعة الحالية، بما في ذلك التكرارات. أما الدالة n_distinct() فتحسب القيم الفريدة في عمود. ويتطلب حساب عدد اللاعبين لكل فريق استخدام الدالة n_distinct()، لأن اللاعب الواحد يظهر في عدة مواسم.

تُعدّ المجاميع على مستوى المجموعة، مثل متوسطات العملاء وعددهم وقيم الحداثة، من أقوى المؤشرات في نماذج الذكاء الاصطناعي الجدولية. وتُعتبر دالة group_by() مع دالة summarise() الطريقة القياسية لبنائها بشكل قابل للتكرار.

نعم. يمكن للمساعدين المدعومين بالذكاء الاصطناعي إعادة كتابة دالتي aggregate() و tapply() كدالتين group_by() و summarise(). قارن عدد الصفوف في كلا الإصدارين، لأن لغة R الأساسية ومكتبة dplyr تتعاملان مع المجموعات المفقودة بشكل مختلف.

تلخيص هذه التدوينة بـ: