如何在 dplyr 中用 mean 替换 na
您可以使用 R 中dplyr和Tidyr包中的函数,使用以下方法将 NA 值替换为平均值:
方法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 中执行其他常见任务: