【问题标题】:How do I replace all NA with mean in R? [duplicate]如何在 R 中用均值替换所有 NA? [复制]
【发布时间】:2017-05-02 21:43:01
【问题描述】:

我的数据集中有超过 1500 列,其中 100 多列至少包含一个 NA。我知道我可以用

替换单个列中的 NA
d$var[is.na(d$var)] <- mean(d$var, na.rm=TRUE)

但是我如何在我的数据集中的所有 NA 中也这样做?

谢谢!

【问题讨论】:

    标签: r missing-data


    【解决方案1】:

    我们可以从zoo 使用na.aggregate。遍历数据集的列(假设所有列都是 numeric ),应用 na.aggregate 将 NA 替换为 mean 值(默认情况下)并将其分配回数据集。

    library(zoo)
    df[] <- lapply(df, na.aggregate)
    

    默认情况下,na.aggregateFUN 参数是mean

    默认 S3 方法:

    na.aggregate(object, by = 1, ..., FUN = mean, na.rm = FALSE, maxgap = Inf)

    要无损地做到这一点:

    df2 <- df
    df2[] <- lapply(df2, na.aggregate)
    

    或一行:

    df2 <- replace(df, TRUE, lapply(df, na.aggregate))
    

    如果有非数字列,请先创建逻辑索引,仅对数字列执行此操作

    ok <- sapply(df, is.numeric)
    df[ok] <- lapply(df[ok], na.aggregate)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-22
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      相关资源
      最近更新 更多