Как навсегда удалить все НС? - PullRequest
0 голосов
/ 01 декабря 2018

Я вменяю пропущенные переменные.Сначала кажется, что эта функция работает:

# Replace NA with "None"

vars_to_none = c("Alley", "BsmtQual", "BsmtCond", "BsmtExposure", "BsmtFinType1", "BsmtFinSF1", "BsmtFinType2", "FireplaceQu", "GarageType", "GarageYrBlt", "GarageFinish", "GarageQual", "GarageCond", "PoolQC", "Fence", "MiscFeature", "MasVnrType")

sapply(combi %>% select(vars_to_none), function(x) x = ifelse(is.na(x), "None", x))

Вывод: кадр данных с "None" в ранее выбранных точках NA.Вот часть вывода.

Переулок BsmtQual BsmtCond BsmtExposure BsmtFinType1 BsmtFinSF1 BsmtFinType2

[1,] "None" "Gd"     "TA"     "No"         "GLQ"        "706"      "Unf"       
[2,] "None" "Gd"     "TA"     "Gd"         "ALQ"        "978"      "Unf"       
[3,] "None" "Gd"     "TA"     "Mn"         "GLQ"        "486"      "Unf"       
[4,] "None" "TA"     "Gd"     "No"         "ALQ"        "216"      "Unf" 

Пока все хорошо.

Но когда я проверяю для NA,

which(is.na(combi$Alley))

... Я получаю более 2000 записей.head () показывает то же самое:

head(combi$Alley)

[1] NA NA NA NA NA NA

Я попытался сохранить функцию sapply в combi, что вызвало ошибку. Я не знакомс.

combi <- sapply(combi %>% select(vars_to_none), function(x) x = ifelse(is.na(x), "None", x))
head(combi$Alley)

Ошибка в комбинированной $ Alley: оператор $ недопустим для атомных векторов

> which(is.na(combi$Alley))

Ошибка в комбинированной $ Alley: оператор $ недопустим для атомных векторов

Как я могу получить комбинированный фрейм данных для постоянного хранения замены NA на "None"?

Ответы [ 2 ]

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

Следующая строка заменит все ваши строки от NA до "None" в вашем combi кадре данных.

combi2 <- combi %>% 
  mutate_all(funs(str_replace_na(., 'None')))
0 голосов
/ 01 декабря 2018

Первая попытка кода, который вы предложили, не имеет назначения обратно к combi, поэтому combi не будут затронуты этими вычислениями.

Необходимо выполнить:

combi[vars_to_non] <- sapply(combi %>% select(vars_to_none), 
                              function(x) x = ifelse(is.na(x), "None", x))

Я бы не использовал смесь кода tidyverse-base, поэтому ответил бы:

combi[vars_to_non] <- lapply( combi[vars_to_non] , 
                              function(x) { x[is.na(x)] <- "None"; x}

Я не уверен, будет ли результат отличаться, но я подозреваю, что моя версия более эффективна, потому что онане требует построения нескольких векторов длины столбца x.

Вторая попытка не удалась, потому что значение по умолчанию для sapply - это матрица, и вы заменили все комбинации на версию с матричным обозначением толькостолбцы, которые вы изменили.Матрицы в R являются просто атомными векторами с размерностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...