我们可以用mutate_all
with ifelse
dt %>%
group_by(a) %>%
mutate_all(funs(ifelse(is.na(.), mean(., na.rm = TRUE), .)))
如果我们想要一个紧凑的选项,那么使用na.aggregate
from zoo
哪个由default
代替NA
价值观与mean
dt %>%
group_by(a) %>%
mutate_all(zoo::na.aggregate)
如果我们没有分组变量,则删除group_by
并使用mutate_if
(只是要小心一些非数字列)
dt %>%
mutate_if(is.numeric, zoo::na.aggregate)
如果所有列都是数字,即使
zoo::na.aggregate(dt)
data
set.seed(42)
dt <- data.frame(a = rep(letters[1:3], each = 3),
b= sample(c(NA, 1:5), 9, replace = TRUE),
c = sample(c(NA, 1:3), 9, replace = TRUE))