有人可以帮我理解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?
谢谢。
在两种情况下,都对NA
进行额外的检查,因为与NA
相比,任何东西都返回NA
。
ifelse(x == 1 & !is.na(x), 1, ifelse(y == 1 & !is.na(y), 2, 0))
#[1] 1 1 2 0 0