【发布时间】:2019-02-06 11:55:15
【问题描述】:
我正在尝试使用mutate 和if_else() 来获得将以下逻辑语句应用于数据框的两列的结果:
如果在 a 或 b 中为 Yes,则为 NA,如果两者都为 NA,如果两者都为 No 或 No & NA,则为 FALSE
library(magrittr)
library(dplyr)
data.frame(
"a"=c(NA,"No","Yes","Yes","No","No",NA),
"b"=c(NA,"No","Yes","No","Yes",NA,"No")
) %>%
mutate(
logical = if_else(
a == "Yes" | b == "Yes",
TRUE,
if_else(
is.na(a) & is.na(b),
NA,
FALSE
)
)
)
#> a b logical
#> 1 <NA> <NA> NA
#> 2 No No FALSE
#> 3 Yes Yes TRUE
#> 4 Yes No TRUE
#> 5 No Yes TRUE
#> 6 No <NA> NA
#> 7 <NA> No NA
在最后两行中,我得到 NA 而不是预期结果 FALSE。预期,因为is.na(a) & is.na(b) 应该返回 FALSE,如下例所示。
# False as expected here
if_else(is.na(NA) & is.na("No"),NA,FALSE)
#> [1] FALSE
我是否错过了 if_else 的工作方式?
由reprex package (v0.2.1) 于 2019 年 2 月 6 日创建
【问题讨论】: