我的数据集中有超过1500列,其中100列包含至少一个NA。我知道我可以通过
替换单列中的NAsd$var[is.na(d$var)] <- mean(d$var, na.rm=TRUE)
但我如何在我的数据集中对所有NA进行此操作?
谢谢!
答案 0 :(得分:-1)
我们可以使用na.aggregate
中的zoo
。循环遍历数据集的列(假设所有列都是numeric
),应用na.aggregate
以mean
值替换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))