2016-05-23 5 views
1
>dput(dummy) 
c(NA, "MGM", NA, "M", NA) 

>dummy 
[1] NA "MGM" NA "M" NA 

>ifelse(dummy == "NA", 0, 1) 
NA 1 NA 1 NA 

У меня есть вектор-символ, и я хочу заменить NA значениями 0 и всего остального как 1. Однако я не знаю, что именно представляют эти символы NA? Как вы можете видеть выше, это не "NA". Когда я попробовал dput(dummy[1]), я получил NA_character_. Что я могу сделать, чтобы получить инструкцию ifelse для распознавания этих NA?R: что такое NA_character_?

+2

Использование 'is.na' для обнаружения Nas. 'ifelse (is.na (dummy), 0, 1)' –

ответ

2

В R ничто не всегда равно NA, но можно быть равно «NA» (как в аббревиатуре для Северной Америки. NA является специальным отсутствующим знаменем и фактически поставляется в нескольких разных вариантах.

?NA # where you can read about the other flavors of NA 
NA_character_ 
#[1] NA 

Как C_Z_ заметки, которые вы можете и должны использовать is.na(), чтобы обнаружить это специальное (не) -значение. Ваш ifelse тест вернулся бы в 0 в любом положении, в котором вектор символа имел значение " NA ", но тест на равенство с использованием" == "до NA всегда будет возвращать NA.

> dummy == NA 
[1] NA NA NA NA NA 

Это могло бы быть менее загадочным:

> ifelse(is.na(dummy), 0, 1) 
[1] 0 1 0 1 0 
> 0+!is.na(dummy) # using 0+... to coerce logical to numeric 
[1] 0 1 0 1 0 
+1

'NA_character_' (и другие) существуют, потому что' NA' является логическим значением, и вы не можете смешивать типы в векторах. Например, вы не можете иметь литерал 'NA' в символьном векторе, потому что для этого потребуется, чтобы вектор символов имел несимвольный элемент (логический' NA'). Вот почему существует 'NA _..._' для других атомных типов, которые поддерживают отсутствующие значения. –

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