19

是否有等价的==但结果是x != NAifx不是NA

以下是我想要的,但它很笨重:

mapply(identical, vec1, vec2)
4

3 回答 3

16

只需将“==”替换为 %in%。

例子:

> df <- data.frame(col1= c("a", "b", NA), col2= 1:3)
> df
       col1 col2
    1    a    1
    2    b    2
    3 <NA>    3

> df[df$col1=="a", ]
       col1 col2
    1     a    1
    NA <NA>   NA

> df[df$col1%in%"a", ]
       col1 col2
    1    a    1

> "x"==NA
  [1] NA

> "x"%in%NA
  [1] FALSE
于 2018-04-19T05:52:09.133 回答
12

1 == NA返回一个逻辑NA而不是TRUEor FALSE。如果你想打电话NA FALSE,你可以添加第二个条件:

set.seed(1)
x <- 1:10
x[4] <- NA
y <- sample(1:10, 10)

x <= y
# [1]  TRUE  TRUE  TRUE    NA FALSE  TRUE  TRUE FALSE  TRUE FALSE

x <= y & !is.na(x)
# [1]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE

您还可以使用第二个处理步骤将所有NA值从相等测试转换为FALSE.

foo <- x <= y
foo[is.na(foo)] <- FALSE
foo
# [1]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE

此外,对于它的价值,NA == NA回报NA也是如此NA != NA

于 2013-01-23T19:38:45.390 回答
1

==运算符通常与过滤 data.frames 结合使用。

在这种情况下,dplyr::filter将仅保留您的条件评估为 的行TRUE,这与[. 这有效地实现==了但 where评估1 == NAFALSE.

例子:

> df <- data.frame(col1= c("a", "b", NA), col2= 1:3)
> df
       col1 col2
    1    a    1
    2    b    2
    3 <NA>    3

> dplyr::filter(df, col1=="a")
       col1 col2
    1     a    1
于 2021-03-11T15:53:09.377 回答