【发布时间】:2017-05-02 21:43:01
【问题描述】:
我的数据集中有超过 1500 列,其中 100 多列至少包含一个 NA。我知道我可以用
替换单个列中的 NAd$var[is.na(d$var)] <- mean(d$var, na.rm=TRUE)
但是我如何在我的数据集中的所有 NA 中也这样做?
谢谢!
【问题讨论】:
标签: r missing-data
我的数据集中有超过 1500 列,其中 100 多列至少包含一个 NA。我知道我可以用
替换单个列中的 NAd$var[is.na(d$var)] <- mean(d$var, na.rm=TRUE)
但是我如何在我的数据集中的所有 NA 中也这样做?
谢谢!
【问题讨论】:
标签: r missing-data
我们可以从zoo 使用na.aggregate。遍历数据集的列(假设所有列都是 numeric ),应用 na.aggregate 将 NA 替换为 mean 值(默认情况下)并将其分配回数据集。
library(zoo)
df[] <- lapply(df, na.aggregate)
默认情况下,na.aggregate 的FUN 参数是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)
【讨论】: