使用mean by group来估算缺失数据

问题描述 投票:2回答:2

我有一个分类变量有三个级别(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做同样的事情,但也许一个for循环(与ifelse)可能会做到这一点?

r loops missing-data imputation
2个回答
2
投票
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))

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
    })]
© www.soinside.com 2019 - 2024. All rights reserved.