Dplyr: كيفية تحويل متغير إذا كان العمود يحتوي على سلسلة
يمكنك استخدام بناء الجملة الأساسي التالي في dplyr لتحويل متغير إذا كان العمود يحتوي على سلسلة معينة:
library (dplyr) df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector ))
يطبق بناء الجملة هذا وظيفة المقياس () على كل متغير في إطار البيانات الذي يحتوي على السلسلة “البادئة” في اسم العمود.
يوضح المثال التالي كيفية استخدام بناء الجملة هذا عمليًا.
مثال: قم بتغيير المتغير إذا كان العمود يحتوي على سلسلة
لنفترض أن لدينا إطار البيانات التالي في R:
#create data frame df <- data. frame (team=c('A', 'B', 'C', 'D', 'E', 'F'), starter_points=c(22, 26, 25, 13, 15, 22), starter_assists=c(4, 5, 10, 14, 12, 10), bench_points=c(7, 7, 9, 14, 13, 10), bench_assists=c(2, 5, 5, 4, 9, 14)) #view data frame df team starter_points starter_assists bench_points bench_assists 1 to 22 4 7 2 2 B 26 5 7 5 3 C 25 10 9 5 4 D 13 14 14 4 5 E 15 12 13 9 6 F 22 10 10 14
يمكننا استخدام بناء الجملة التالي لتطبيق وظيفة المقياس () على كل متغير في إطار البيانات الذي يحتوي على السلسلة “بادئ” في اسم العمود.
library (dplyr) #apply scale() function to each variable that contains 'starter' in the name df %>% mutate_at(vars(contains(' starter ')), ~ (scale(.) %>% as. vector )) team starter_points starter_assists bench_points bench_assists 1 A 0.2819668 -1.3180158 7 2 2 B 1.0338784 -1.0629159 7 5 3 C 0.8459005 0.2125832 9 5 4 D -1.4098342 1.2329825 14 4 5 E -1.0338784 0.7227828 13 9 6 F 0.2819668 0.2125832 10 14
باستخدام بناء الجملة هذا، تمكنا من تطبيق الدالة Scale() لقياس كل عمود يحتوي على “starter” بحيث يكون لقيمها الآن متوسط 0 وانحراف معياري 1.
لاحظ أنه تم تعديل الأعمدة التالية:
- starter_points
- starter_assists
ظلت جميع الأعمدة الأخرى دون تغيير.
لاحظ أيضًا أنه يمكننا تطبيق أي وظيفة نريدها باستخدام بناء الجملة هذا.
في المثال السابق، اخترنا قياس كل عمود باستخدام السلسلة “starter” في الاسم.
ومع ذلك، يمكننا أن نفعل شيئًا أبسط، مثل ضرب القيم في اثنين لكل عمود به كلمة “starter” في الاسم:
library (dplyr) #multiply values by two for each variable that contains 'starter' in the name df %>% mutate_at(vars(contains(' starter ')), ~ (. * 2 )) team starter_points starter_assists bench_points bench_assists 1 A 44 8 7 2 2 B 52 10 7 5 3 C 50 20 9 5 4 D 26 28 14 4 5 E 30 24 13 9 6 F 44 20 10 14
لاحظ أن قيم أعمدة starter_points و starter_assists قد تم ضربها في اثنين، بينما ظلت جميع الأعمدة الأخرى دون تغيير.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى في dplyr:
كيفية حذف الصفوف باستخدام dplyr
كيفية تحديد الأعمدة حسب الفهرس باستخدام dplyr
كيفية تصفية الصفوف التي تحتوي على سلسلة معينة باستخدام dplyr