【问题标题】:Impute missing data with mean by group按组用平均值估算缺失数据
【发布时间】:2019-08-16 03:42:12
【问题描述】:

我有一个包含三个级别的分类变量(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


【解决方案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))

【讨论】:

  • 只是为了好玩,在上面添加了一个base-R解决方案。
  • 我不确定您在寻找什么。请将此作为新问题发布。如果你想让我检查一下,你可以从这里的评论链接到它。
【解决方案2】:

您可以使用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
    })]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多