我必须用所有变量的中位数替换缺失值。 我知道如何分别为每个变量做这件事。
df$x1=ifelse(is.na(df$x1),median(df$x1,na.rm=T),df$x1)
但我有21个变量,必须对x1-x20的20个变量进行替换。 如何一次替换20个变量的缺失值? 我不想创建20个字符串。
答案 0 :(得分:1)
您可以使用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