R:什么是NA_character_?

Adr*_*ian 8 r

>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

42-*_*42- 6

在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)

  • 之所以会存在NA_character_(以及其他),是因为NA是一个逻辑值,并且您不能在向量中混合类型。例如,您不能在字符向量中使用字面量“ NA”,因为这将要求字符向量具有非字符元素(逻辑“ NA”)。这就是为什么其他原子类型支持`NA _..._`支持缺失值的原因。 (4认同)
  • 其他类型的 NA 值是:NA_integer_、NA_real_、NA_complex_ 和 NA_character_。请参阅 [NA 的 R 文档](https://stat.ethz.ch/R-manual/R-devel/library/base/html/NA.html)。 (2认同)