R如何用2个向量处理NA?

问题描述 投票:0回答:1

有人可以帮我理解R在ifelse语句中如何处理NA?

假设我有以下向量:

x <- c(1, 1, 3, NA, 4)
y <- c(1, NA, 1, NA, NA)

我想基于这两个向量创建另一个向量,而我想要的输出是:

z <- c(1, 1, 2, 0, 0)

我已经尝试过:

z <- ifelse(x == 1, 1
            , ifelse(y == 1, 2, 0))

而且我尝试了这一点(似乎不得不将所有这些全部拼出来:]

z <- ifelse(x == 1, 1
            , ifelse(!is.na(x)
                     , ifelse(y == 1, 2
                              , ifelse(is.na(y), 0, NA))
                     , 0))

无论如何都不起作用...两者都返回:

> z
[1]  1  1  2 NA NA

[有人可以帮助我不仅了解如何获得所需的结果,而且了解R在处理涉及2个向量的ifelse时如何对待NA?

谢谢。

r if-statement na
1个回答
0
投票

在两种情况下,都对NA进行额外的检查,因为与NA相比,任何东西都返回NA

ifelse(x == 1 & !is.na(x), 1, ifelse(y == 1 & !is.na(y), 2, 0))
#[1] 1 1 2 0 0
© www.soinside.com 2019 - 2024. All rights reserved.