如何在r中用中位数替换na
您可以使用 R 中dplyr和Tidyr包中的函数,使用以下方法将 NA 值替换为中位数:
方法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 删除行
如何在 dplyr 中使用 across() 函数