如何用R中的均值替换所有NA?

时间:2016-12-17 04:52:12

标签: r missing-data

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

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

但我如何在我的数据集中对所有NA进行此操作?

谢谢!

1 个答案:

答案 0 :(得分:-1)

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

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

默认情况下,FUN的{​​{1}}参数为na.aggregate

  

默认S3方法:

     

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

要非破坏性地这样做:

mean

或一行:

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

如果存在非数字列,请通过先创建逻辑索引

,仅对数字列执行此操作
df2 <- replace(df, TRUE, lapply(df, na.aggregate))