如何应对ifelse中的NA?

时间:2019-02-01 16:12:24

标签: r

假设我们有这个:

x=5
y=NA
x1=8
y1=NA
ifelse(x < y, x1, y1)
[1] NA

因为其中之一是NA,我希望ifelse返回该值。 在这种情况下非常理想的输出:

 ifelse(x < y, x1, y1)
  [1] 8

2 个答案:

答案 0 :(得分:1)

我可能建议在这里使用is.na

ifelse(x < y || (is.na(y) + is.na(x)) == 1, x1, y1)

[1] 8

如果x < y或第二个参数yNA,则条件将返回true。

答案 1 :(得分:1)

ifelse(any(is.na(x),is.na(y)),
  c(x1,y1)[c(!is.na(x),!is.na(y))],
  ifelse(x < y, x1, y1))

首先,我们检查是否存在NA,如果存在,则返回与非NA匹配的答案。如果没有NA,我们将运行OP编写的原始ifelse。