كيفية استبدال na بالمتوسط في dplyr
يمكنك استخدام الطرق التالية لاستبدال قيم NA بالمتوسط باستخدام وظائف من حزمتي dplyr و Tidyr في R:
الطريقة الأولى: استبدال قيم NA بالمتوسط في عمود
df %>% mutate(across(col1, ~replace_na(., mean(., na. rm = TRUE ))))
الطريقة الثانية: استبدال قيم NA بالمتوسط في أعمدة متعددة
df %>% mutate(across(c(col1, col2), ~replace_na(., mean(., na. rm = TRUE ))))
الطريقة الثالثة: استبدال قيم NA بالمتوسط في جميع الأعمدة الرقمية
df %>% mutate(across(where(is. numeric ), ~replace_na(., mean(., na. rm = TRUE ))))
توضح الأمثلة التالية كيفية استخدام كل طريقة عمليًا مع إطار البيانات التالي:
#create data frame df <- data. frame (player=c('A', 'B', 'C', 'D', 'E'), points=c(17, 13, NA, 9, 25), rebounds=c(3, 4, NA, NA, 8), blocks=c(1, 1, 2, 4, NA)) #view data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C NA NA 2 4 D 9 NA 4 5 E 25 8 NA
مثال 1: استبدال قيم NA بالمتوسط في عمود
الكود التالي يوضح كيفية استبدال قيم NA في عمود النقاط بالقيمة المتوسطة في عمود النقاط :
library (dplyr) library (tidyr) #replace NA values in points column with mean of points column df <- df %>% mutate(across(points, ~replace_na(., mean(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C 16 NA 2 4 D 9 NA 4 5 E 25 8 NA
وكان متوسط القيمة في عمود النقاط هو 16، لذلك تم استبدال قيمة NA في عمود النقاط بـ 16.
ظلت جميع الأعمدة الأخرى دون تغيير.
مثال 2: استبدال قيم NA بالمتوسط في أعمدة متعددة
يوضح الكود التالي كيفية استبدال قيم NA في أعمدة النقطة والكتلة بمتوسطات الأعمدة الخاصة بها:
library (dplyr) library (tidyr) #replace NA values in points and blocks columns with their respective means df <- df %>% mutate(across(c(points, blocks), ~replace_na(., mean(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C 16 NA 2 4 D 9 NA 4 5 E 25 8 2
لاحظ أنه تم استبدال قيم NA في أعمدة النقطة والكتلة بوسائل العمود الخاصة بها.
مثال 3: استبدال قيم NA بالمتوسط في جميع الأعمدة الرقمية
يوضح الكود التالي كيفية استبدال قيم NA في كل عمود رقمي بمتوسط القيمة الخاصة بها:
library (dplyr) library (tidyr) #replace NA values in all numeric columns with their respective means df <- df %>% mutate(across(where(is. numeric ), ~replace_na(., mean(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C 16 5 2 4 D 9 5 4 5 E 25 8 2
لاحظ أنه تم استبدال قيم NA في جميع الأعمدة الرقمية بمتوسطات الأعمدة الخاصة بها.
العمود الوحيد الذي لم يكن رقميًا (اللاعب) ظل دون تغيير.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ المهام الشائعة الأخرى في dplyr:
كيفية تصفية الصفوف التي تحتوي على سلسلة معينة باستخدام dplyr
كيفية حساب الترددات النسبية باستخدام dplyr
كيفية تحديد الصف الأول حسب المجموعة باستخدام dplyr