วิธีแทนที่ na ด้วยค่ามัธยฐานใน r
คุณสามารถใช้วิธีการต่อไปนี้เพื่อแทนที่ค่า NA ด้วยค่ามัธยฐานโดยใช้ฟังก์ชันจากแพ็คเกจ dplyr และ Tidyr ใน R:
วิธีที่ 1: แทนที่ค่า NA ด้วยค่ามัธยฐานในคอลัมน์
df %>% mutate(across(col1, ~replace_na(., median(., na. rm = TRUE ))))
วิธีที่ 2: แทนที่ค่า NA ด้วยค่ามัธยฐานในหลายคอลัมน์
df %>% mutate(across(c(col1, col2), ~replace_na(., median(., na. rm = TRUE ))))
วิธีที่ 3: แทนที่ค่า NA ด้วยค่ามัธยฐานในคอลัมน์ตัวเลขทั้งหมด
df %>% mutate(across(where(is. numeric ), ~replace_na(., median(., 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 median of points column df <- df %>% mutate(across(points, ~replace_na(., median(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1 2 B 13 4 1 3 C 15 NA 2 4 D 9 NA 4 5 E 25 8 NA
ค่ามัธยฐานในคอลัมน์ คะแนน คือ 15 ดังนั้นค่า NA ในคอลัมน์ คะแนน จึงถูกแทนที่ด้วย 15
คอลัมน์อื่นๆ ทั้งหมดยังคงไม่เปลี่ยนแปลง
ตัวอย่างที่ 2: แทนที่ค่า NA ด้วยค่ามัธยฐานในหลายคอลัมน์
รหัสต่อไปนี้แสดงวิธีแทนที่ค่า NA ในคอลัมน์ จุด และ บล็อก ด้วยค่ามัธยฐานของคอลัมน์ที่เกี่ยวข้อง:
library (dplyr) library (tidyr) #replace NA values in points and blocks columns with their respective medians df <- df %>% mutate(across(c(points, blocks), ~replace_na(., median(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1.0 2 B 13 4 1.0 3 C 15 NA 2.0 4 D 9 NA 4.0 5 E 25 8 1.5
โปรดทราบว่าค่า NA ในคอลัมน์ จุด และ บล็อก ได้ถูกแทนที่ด้วยค่ามัธยฐานของคอลัมน์ตามลำดับ
ตัวอย่างที่ 3: แทนที่ค่า NA ด้วยค่ามัธยฐานในคอลัมน์ตัวเลขทั้งหมด
รหัสต่อไปนี้แสดงวิธีแทนที่ค่า NA ในแต่ละคอลัมน์ตัวเลขด้วยค่ามัธยฐานตามลำดับ:
library (dplyr) library (tidyr) #replace NA values in all numeric columns with their respective medians df <- df %>% mutate(across(where(is. numeric ), ~replace_na(., median(., na. rm = TRUE )))) #view updated data frame df player points rebounds blocks 1 to 17 3 1.0 2 B 13 4 1.0 3 C 15 4 2.0 4 D 9 4 4.0 5 E 25 8 1.5
โปรดทราบว่าค่า NA ในคอลัมน์ตัวเลขทั้งหมดถูกแทนที่ด้วยค่ามัธยฐานของคอลัมน์ตามลำดับ
คอลัมน์เดียวที่ไม่ใช่ตัวเลข (ผู้เล่น) ยังคงไม่เปลี่ยนแปลง
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานทั่วไปอื่น ๆ ใน dplyr:
วิธีกรองแถวที่มีสตริงบางตัวโดยใช้ dplyr
วิธีลบแถวโดยใช้ dplyr
วิธีใช้ฟังก์ชัน cross() ใน dplyr