كيفية التجميع حسب كافة الأعمدة باستثناء واحد في 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

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *