if_else true值,默认为NA

时间:2018-10-15 08:43:36

标签: r dplyr plyr

我正在尝试使用dplyr的if_else语句对data_frame中的新列进行突变。但是,如果TRUE的默认值是NA,则我分配给向量的值是FALSE值。我不确定它是否与变量类型有关或与变量类型有关,但对此我将非常感谢。

我的数据

data <- 
 data.frame(SP = c("A","B","C","D","E"),
            Sale = c("Y","Y",NA,"Y",NA),
            WWS = c(NA,NA,"Y",NA,"Y"))

现有代码以添加新列

data %>%
  mutate(RMV = if_else(
               Sale == "Y" & WWS != "Y", "Keep","-"))

运行上面的代码时,所有TRUE值都默认为NA,而不是Keep。

1 个答案:

答案 0 :(得分:1)

您想要这样的东西吗?

data %>%
  mutate(RMV = (Sale == "Y" & !is.na(Sale)) & (WWS != "Y" | is.na(WWS)))

  SP Sale  WWS   RMV
1  A    Y <NA>  TRUE
2  B    Y <NA>  TRUE
3  C <NA>    Y FALSE
4  D    Y <NA>  TRUE
5  E <NA>    Y FALSE

?Comparison的帮助中说明了您最初尝试的问题:

  

缺少值(NA)和NaN值甚至与它们自己也无法比较,因此涉及它们的比较将始终导致NA。

基本上,您不能使用任何比较运算符来比较NA。因此,请使用以下任何一种方法:

x < y
x > y
x <= y
x >= y
x == y
x != y

...上面x或y中的一个(或两个!)均为NA的情况下,始终会得出NA。