按组用均值插补缺失数据

Jon*_*ino 8 loops r missing-data imputation

我有三个层次分类变量(AB,和C)。

我还有一个连续变量,上面有一些缺失值。

我想NA用其组的平均值替换这些值。A也就是说, group 中缺失的观察值必须替换为 group 的平均值A

我知道我可以计算每个组的平均值并替换缺失值,但我确信还有另一种方法可以通过循环更有效地做到这一点。

A <- subset(data, group == "A")
mean(A$variable, rm.na = TRUE)
A$variable[which(is.na(A$variable))] <- mean(A$variable, na.rm = TRUE)
Run Code Online (Sandbox Code Playgroud)

现在,我知道我可以对 group Band做同样的事情C,但也许for循环(with ifand else)可能会起作用?

iod*_*iod 5

require(dplyr)
data %>% group_by(group) %>%
mutate(variable=ifelse(is.na(variable),mean(variable,na.rm=TRUE),variable))
Run Code Online (Sandbox Code Playgroud)

对于更快的 base-R 版本,您可以使用ave

data$variable<-ave(data$variable,data$group,FUN=function(x) 
  ifelse(is.na(x), mean(x,na.rm=TRUE), x))
Run Code Online (Sandbox Code Playgroud)