>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
Run Code Online (Sandbox Code Playgroud)
我有一个字符向量,我想将NA值替换为0,其他所有值都替换为1.但是,我不知道这些NA字符到底是什么?正如你在上面看到的,他们不是"NA".当我尝试时,dput(dummy[1])我得到了NA_character_.我该怎么做才能让ifelse语句识别出那些NA?
在R中,没有任何事物等于,NA但有可能等于“ NA”(如在北美的缩写中)。它NA是一种特殊的缺失值占位符,实际上具有两种不同的味道。
?NA # where you can read about the other flavors of NA
NA_character_
#[1] NA
Run Code Online (Sandbox Code Playgroud)
如C_Z_所述,您可以并且应该使用is.na()来检测这些特殊(非)值。您的ifelse测试将在字符向量的值为“ NA”的任何位置返回0,但是使用“ ==”进行相等性测试NA将始终返回NA。
> dummy == NA
[1] NA NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
这些可能不那么令人困惑:
> 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
Run Code Online (Sandbox Code Playgroud)