Проблема с оценкой NA во вложенных ifelse выражениях - PullRequest
0 голосов
/ 16 января 2020

Порядок вложенного оператора ifelse, по-видимому, влияет на оценку условий is.na.

# Create df
Var1 <- c(5,5,5,5)
Var2 <- c(0,0,NA,NA)
tmp.1 <- data.frame(Var1, Var2)


# Why is it not possible to evaluate NA in the second nested ifelse statement?
tmp.1$Var2 <- ifelse(tmp.1$Var1 == 5 & tmp.1$Var2 == 0, 6,
                     ifelse(tmp.1$Var1 == 5 & is.na(tmp.1$Var2), 7, tmp.1$Var2))


# Yet it works when the same ifelse statement comes first.
tmp.1$Var2 <- ifelse(tmp.1$Var1 == 5 & is.na(tmp.1$Var2), 7,
                     ifelse(tmp.1$Var1 == 5 & tmp.1$Var2 == 0, 6, tmp.1$Var2))

Есть ли здесь логика c или это ошибка?

Ответы [ 2 ]

5 голосов
/ 16 января 2020

Первый ifelse оценивается первым. Результат строки ниже:

tmp.1$Var1 == 5 & tmp.1$Var2 == 0 
[1] TRUE TRUE   NA   NA

, если ifelse возвращает NA вместо FALSE, поэтому он не go к следующему параметру

0 голосов
/ 16 января 2020

На самом деле вы можете проверить значение NA в первом ifelse, поэтому нужен только один ifelse, т. Е.

tmp.1$Var2 <- ifelse(is.na(tmp.1$Var1 == 5 & tmp.1$Var2 == 0), 7, 6)

, такой что

> tmp.1
  Var1 Var2
1    5    6
2    5    6
3    5    7
4    5    7

Проблема, с которой вы столкнулись, заключается в том, что & работает поверх NA, поскольку TRUE & NA дает NA

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...