Мы можем использовать lapply
для циклического перебора столбцов, replace
NA
элементов на основе индекса с mean
этого значения
data[] <- lapply(data, function(x) replace(x, is.na(x), mean(x, na.rm = TRUE)))
Или это прощес na.aggregate
из zoo
, который по умолчанию использует FUN = mean
na.aggregate (object, by = 1, ..., FUN = mean, na.rm = FALSE, maxgap =Инф)
library(zoo)
data1 <- na.aggregate(data)
Если мы используем цикл for
, мы рекомендуем установить для столбца значение [[
вместо [
, поскольку «данные» могут быть data.frame
или tbl_df
или data.table
, и все они работают с [[
при извлечении столбца
for(i in seq_along(data)) data[[i]][is.na(data[[i]])] <-
mean(data[[i]], na.rm = TRUE)