#r #for-loop
#r #цикл for
Вопрос:
Garages <- c('GarageFinish','GarageQual','GarageCond','GarageType')
Bsmts <- c("BsmtExposure","BsmtFinType2","BsmtQual","BsmtCond","BsmtFinType1")
for (x in c(Garages, Bsmts) )
{
data[[x]] <- factor( data[[x]], levels= c(levels(data[[x]]),c('None')))
data[[x]][is.na(data[[x]])] <- "None"
}
У меня есть два вектора, хранящих столбцы, которые содержат пропущенные значения.
Я пытаюсь использовать цикл ‘for’ для перебора всех этих столбцов и замены отсутствующих значений в этих столбцах на «None» в качестве нового уровня этих факторных переменных.
Однако после запуска этого блока кода я получил только замену отсутствующих значений столбца «BsmtFinType1». Кто-нибудь может сказать мне, в чем проблема? Спасибо.
Ответ №1:
Не удалось воспроизвести проблему с небольшим воспроизводимым примером
for (x in c(Garages, Bsmts) ) {
data[[x]] <- factor( data[[x]], levels= c(levels(data[[x]]),c('None')))
data[[x]][is.na(data[[x]])] <- "None"
}
data
# GarageFinish BsmtExposure
#1 a d
#2 b e
#3 c None
#4 None f
#5 a g
Возможно, что NA
значения являются строками "NA"
и, следовательно, is.na
не удается перехватить его в других столбцах, кроме последнего столбца, где он находится NA
данные
data <- data.frame(GarageFinish = c('a', 'b', 'c', NA, 'a'),
BsmtExposure = c('d', 'e', NA, 'f', 'g'), stringsAsFactors = TRUE)
Garages <- 'GarageFinish'
Bsmts <- 'BsmtExposure'