R子集特定值还返回NA?

时间:2018-10-15 04:45:35

标签: r vector subset

我刚开始学习R,遇到了如下一段代码

vec_1 <- c("a","b", NA, "c","d")

# create a subet of all elements which equal "a"
vec_1[vec_1 == "a"]

结果是

## [1] "a" NA

我只是好奇,因为我将vec_1替换为值“ a”,为什么NA也出现在我的结果中?

1 个答案:

答案 0 :(得分:1)

这是因为任何== NA的结果都是NA。甚至NA == NA都是NA

这是vec_1 == "a"的输出-

[1] TRUE FALSE NA FALSE FALSE

NA不是TRUEFALSE,因此当您用NA子集化任何内容时,您将得到NA。检查一下-

vec_1[NA]
[1] NA NA NA NA NA

在处理NA时,R试图提供最有信息的答案,即T | NA返回TRUE,因为不管NA是什么。这里还有更多示例-

T | NA
[1] TRUE

F | NA
[1] NA

T & NA
[1] NA

F & NA
[1] FALSE

R无法测试与NA的相等性。您可以使用%in%运算符-

5 %in% NA
[1] FALSE

"a" %in% NA
[1] FALSE

vec_1[vec_1 %in% "a"]
[1] "a"