This question already has answers here:
Median imputation using sapply

(2个答案)


2年前关闭。




我必须用所有变量的中位数替换缺失值。
我知道如何分别为每个变量执行此操作。
df$x1=ifelse(is.na(df$x1),median(df$x1,na.rm=T),df$x1)

但是我有21个变量,必须对x1-x20中的20个变量进行替换。
如何一次替换20个变量的缺失值?
我不想创建20个字符串。

最佳答案

您可以使用dplyr::mutate_at用该列的median替换缺少的值。 mutate_at提供了灵活性(使用start_with)来选择以X开头的列(将对其应用规则)。

library(dplyr)

df %>% mutate_at(vars(starts_with("X")), funs(ifelse(is.na(.),median(., na.rm = TRUE),.)))

#    ID X1   X2
# 1   a  1 21.0
# 2   b  2 22.0
# 3   c  7 23.0  << X1 was missing
# 4   d  7 24.0  << X1 was missing
# 5   e  7 25.0  << X1 was missing
# 6   f  6 26.0
# 7   g  7 24.5  << X2 was missing
# 8   h  8 24.5  << X2 was missing
# 9   i  9 29.0
# 10  j 10 30.0

样本数据:
df <- data.frame(ID=letters[1:10], X1 = 1:10, X2 = 21:30)
df$X1[3:5] <- NA
df$X2[7:8] <- NA

df
#    ID X1 X2
# 1   a  1 21
# 2   b  2 22
# 3   c NA 23
# 4   d NA 24
# 5   e NA 25
# 6   f  6 26
# 7   g  7 NA
# 8   h  8 NA
# 9   i  9 29
# 10  j 10 30

07-24 09:51
查看更多