按组估算均值缺失数据

时间:2019-03-25 20:03:32

标签: r loops missing-data imputation

我有一个具有三个级别的分类变量(ABC)。

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

我想用其组的平均值替换NA值。也就是说,必须将A组中缺失的观测值替换为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)

现在,我知道我可以对组BC进行相同的操作,但是也许可以使用forif进行else循环有用吗?

2 个答案:

答案 0 :(得分:1)

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

要获得更快的base-R版本,可以使用ave

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

答案 1 :(得分:0)

您可以使用data.table软件包来实现这一目标-

tomean <- c("var1", "var2")
library(data.table)
setDT(dat)
dat[, (tomean) := lapply(tomean, function(x) {
        x <- get(x)
        x[is.na(x)] <- mean(x, na.rm = TRUE)
        x
    })]