كيفية استخدام case_when() في dplyr


يمكن استخدام الدالة case_when() من الحزمة dplyr في R لإنشاء متغيرات جديدة من المتغيرات الموجودة.

تستخدم هذه الوظيفة بناء الجملة الأساسي التالي:

 library (dplyr)

df %>%
  mutate (new_var = case_when (var1 < 15 ~ ' low ',
                             var2 < 25 ~ ' med ',
                             TRUE ~ ' high '))

لاحظ أن TRUE يعادل عبارة “آخر”.

توضح الأمثلة التالية كيفية استخدام هذه الوظيفة عمليًا مع إطار البيانات التالي:

 #create data frame
df <- data. frame (player = c('AJ', 'Bob', 'Chad', 'Dan', 'Eric', 'Frank'),
                 position = c('G', 'F', 'F', 'G', 'C', NA),
                 points = c(12, 15, 19, 22, 32, NA),
                 assists = c(5, 7, 7, 12, 11, NA))

#view data frame
df

  player position points assists
1 AJ G 12 5
2 Bob F 15 7
3 Chad F 19 7
4 Dan G 22 12
5 Eric C 32 11
6 Frank NA NA NA

مثال 1: إنشاء متغير جديد من متغير موجود

الكود التالي يوضح كيفية إنشاء متغير جديد يسمى الجودة والتي تشتق قيمها من عمود النقاط :

 df %>%
mutate (quality = case_when (points > 20 ~ ' high ',
                             points > 15 ~ ' med ',
                             TRUE ~ ' low ' ))

  player position points assists quality
1 AJ G 12 5 low
2 Bob F 15 7 low
3 Chad F 19 7 med
4 Dan G 22 12 high
5 Eric C 32 11 high
6 Frank NA NA NA low

إليك بالضبط كيفية قيام الدالة case_when() بإنشاء قيم العمود الجديد:

  • إذا كانت القيمة الموجودة في عمود النقاط أكبر من 20، فإن القيمة الموجودة في عمود الجودة تكون “عالية”.
  • بخلاف ذلك، إذا كانت القيمة في عمود النقاط أكبر من 15، فستكون القيمة في عمود الجودة “متوسطة”.
  • بخلاف ذلك، إذا كانت القيمة الموجودة في عمود النقاط أقل من أو تساوي 15 (أو قيمة مفقودة مثل NA)، فإن القيمة الموجودة في عمود الجودة تكون “منخفضة”.

المثال 2: إنشاء متغير جديد من متغيرات متعددة

الكود التالي يوضح كيفية إنشاء متغير جديد يسمى الجودة والتي تشتق قيمها من النقاط والأعمدة المساعدة :

 df %>%
mutate (quality = case_when (points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA average

لاحظ أنه يمكننا أيضًا استخدام الدالة is.na() ‎ لتعيين سلاسل نصية بشكل صريح لقيم NA:

 df %>%
mutate (quality = case_when (is. na (points) ~ ' missing ',
                             points > 15 & assists > 10 ~ ' great ',
                             points > 15 & assists > 5 ~ ' good ',
                             TRUE ~ ' average ' ))

  player position points assists quality
1 AJ G 12 5 average
2 Bob F 15 7 average
3 Chad F 19 7 good
4 Dan G 22 12 great
5 Eric C 32 11 great
6 Frank NA NA NA missing

مصادر إضافية

كيفية ترتيب الخطوط في R
كيفية حساب الملاحظات لكل مجموعة في R
كيفية تصفية الصفوف التي تحتوي على سلسلة معينة في R

Add a Comment

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