【问题标题】:R Subsetting Specific Value Also Returns NA?R子集特定值也返回NA?
【发布时间】:2019-03-19 11:28:03
【问题描述】:

刚开始学习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 也会出现在我的结果中?

【问题讨论】:

  • 因为 NA 不等于任何东西,甚至不等于另一个 NA。因此,任何在运算符两侧带有 NA 的逻辑测试都会返回 NA。这正是 R 所做的。我认为这很愚蠢而且很烦人,但我无法在 htat 意见上获得太多关注。

标签: r vector subset


【解决方案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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-05
    • 2018-09-08
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多