2015-04-10 5 views
1

У меня есть переменная, которая имеет три значения: NA, Yes, MayBe.замена значений NA

Когда я использую уровни и функцию класса по этому переменному я получаю тезисы значение

  > levels(Data1$Case) 
      "Yes"     "May Be" 

      > class(Data1$Case) 
      "factor" 

Я пытаюсь заменить НС значения с Нет, поэтому я использую этот код

 Data1$Col1[is.na(Data1$Col1)]= "No" 

Я получаю ошибка,

 In `[<-.factor`(`*tmp*`, is.na(Data1$Col1), value = c(NA, : 
     invalid factor level, NA generated 

Я написал заявление IfElse заменить Н.А.,

 Data1$Col1=ifelse(is.na(Data1$Col1_ == 'TRUE'), "No",Data1$Col1) 

, и это работает, но я ищу некоторые эффективные способы замены НО.

ответ

6

Вы можете использовать addNA() и функцию замены levels<-.

x <- factor(c(NA, "Yes", "Maybe")) 
# [1] <NA> Yes Maybe 
# Levels: Maybe Yes 

## If present, add NA to the factor levels 
addNA(x) 
# [1] <NA> Yes Maybe 
# Levels: Maybe Yes <NA> 
y <- addNA(x) 

## replace the NA level with 'No' 
levels(y)[is.na(levels(y))] <- "No" 
y 
# [1] No Yes Maybe 
# Levels: Maybe Yes No 
+0

здорово, что работал, –

+0

никогда не знал о том, что один – rawr

+0

Nice один! В качестве альтернативы вы можете добавить значение в 'levels (y)' перед тем, как попытаться изменить его в векторе. – ilir

Смежные вопросы