كيفية التجميع حسب كافة الأعمدة باستثناء واحد في dplyr
يمكنك استخدام بناء الجملة الأساسي التالي لتجميع كل الأعمدة باستثناء عمود واحد في إطار بيانات باستخدام حزمة dplyr في R:
df %>%
group_by(across(c( - this_column)))
يقوم هذا المثال تحديدًا بتجميع إطار البيانات حسب جميع الأعمدة باستثناء العمود المسمى this_column .
لاحظ أن العلامة السالبة ( – ) في الصيغة تخبر dplyr باستبعاد هذا العمود المعين في الدالة group_by() .
يوضح المثال التالي كيفية استخدام بناء الجملة هذا عمليًا.
مثال: التجميع حسب كافة الأعمدة باستثناء عمود واحد في dplyr
لنفترض أن لدينا إطار البيانات التالي في R الذي يحتوي على معلومات حول لاعبي كرة السلة المختلفين:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'), starter=c('Y', 'Y', 'Y', 'N', 'Y', 'N', 'N', 'N'), dots=c(99, 104, 119, 113)) #view data frame df team position starter points 1 AGY 99 2 AGY 104 3 AFY 119 4 AFN 113 5 BGY 99 6 BGN 104 7 BFN 119 8 BFN 113
لنفترض الآن أننا نريد العثور على القيمة القصوى في عمود النقاط ، مجمعة عبر جميع الأعمدة الأخرى في إطار البيانات.
يمكننا استخدام بناء الجملة التالي للقيام بذلك:
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c( - points))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
ومن النتيجة يمكننا أن نرى:
- الحد الأقصى لقيمة النقاط لجميع اللاعبين الذين لديهم قيمة الفريق A، وقيمة المركز G، وقيمة البداية Y كانت 104 .
- الحد الأقصى لقيمة النقاط لجميع اللاعبين الذين لديهم قيمة فريق A، وقيمة المركز F، وقيمة البداية Y كانت 119 .
- الحد الأقصى لقيمة النقاط لجميع اللاعبين الذين لديهم قيمة فريق A، وقيمة المركز F، وقيمة البداية N كانت 113 .
وما إلى ذلك وهلم جرا.
لاحظ أنه يمكننا أيضًا الحصول على نفس النتيجة إذا كتبنا اسم كل عمود باستثناء النقاط في الدالة group_by() :
library (dplyr) #group by all columns except points column and find max points df %>% group_by(across(c(team, position, starter))) %>% mutate(max_points = max(points)) # A tibble: 8 x 5 # Groups: team, position, starter [6] team position starter points max_points 1 AGY 99 104 2 AGY 104 104 3 AFY 119 119 4 AFN 113 113 5 BGY 99 99 6 BGN 104 104 7 BFN 119 119 8 BFN 113 119
وهذا يتوافق مع نتيجة المثال السابق.
ومع ذلك، لاحظ أنه من الأسهل بكثير استبعاد عمود النقاط في الدالة group_by() بدلاً من كتابة أسماء جميع الأعمدة الأخرى.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى باستخدام dplyr:
كيفية تصفية الصفوف التي تحتوي على سلسلة معينة باستخدام dplyr
كيفية حساب الترددات النسبية باستخدام dplyr
كيفية تحديد الصف الأول حسب المجموعة باستخدام dplyr