>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
(当我们不知道它是什么时,怎么可能是 ==
到 NA
?)但它可能等于“NA”(缩写中的两个字母的字符值北美。NA
(无引号)是一个特殊的缺失值占位符,实际上有不同的风格,每个原子类都有一个。
?NA # where you can read about the other flavors of NA
NA_character_
#[1] NA
正如 C_Z_ 所指出的,您可以并且应该使用 is.na() 来检测这些特殊(非)值。您的 ifelse
测试将在字符向量的值为“NA”的任何位置返回 0,但使用“==”对 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
关于R:什么是NA_character_?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400665/