วิธีแทนที่ na ด้วย mean ใน dplyr


คุณสามารถใช้วิธีการต่อไปนี้เพื่อแทนที่ค่า NA ด้วยค่าเฉลี่ยโดยใช้ฟังก์ชันจากแพ็คเกจ dplyr และ Tidyr ใน R:

วิธีที่ 1: แทนที่ค่า NA ด้วยค่าเฉลี่ยในคอลัมน์

 df %>% mutate(across(col1, ~replace_na(., mean(., na. rm = TRUE ))))

วิธีที่ 2: แทนที่ค่า NA ด้วยค่าเฉลี่ยในหลายคอลัมน์

 df %>% mutate(across(c(col1, col2), ~replace_na(., mean(., na. rm = TRUE ))))

วิธีที่ 3: แทนที่ค่า 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

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *