Замена значений NA с помощью столбцов - PullRequest
0 голосов
/ 16 декабря 2018

У меня есть набор данных с 12 столбцами, которые имеют значения NA, я могу заменить значения NA на среднее значение столбцов, если я это сделаю:

data$F1[which(is.na(data$F1))] <- mean(data$F1,na.rm = TRUE)

И продолжить отдельно для каждого столбца.

Как я могу кодировать цикл for, который будет проверять каждый столбец и заменять NA на среднее значение:

for(i in 1:ncol(data)){
  data[is.na(data[,i]), i] <- mean(data[,i], na.rm = TRUE)}

Я получаю ошибку: объект не найден.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Самый простой способ, которым я знаю, как заменить все значения NA на значения столбцов, - это использовать функцию replace_na пакета tidyr.Два аргумента, которые вам нужны, - это датафрейм и список значений, которые нужно заменить символами na (первое значение в списке - это то, чем заменяются NA в первом столбце, второе значение - это то, чем заменяются NA во втором столбце и т. Д....).

Вы можете использовать lapply для получения значения столбца:

col_means <- lapply(data, mean, na.rm = TRUE)
data1 <- replace_na(data, col_means)
0 голосов
/ 16 декабря 2018

Мы можем использовать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...