Почему это заявление ifelse производит NA? - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь создать новую переменную на основе других переменных в моем наборе данных.Я использовал ifelse для выполнения аналогичных задач, однако, когда я попробовал это время, я получаю NA, когда условие не выполняется.

Все переменные, на которых я хочу основать новую переменную, являются двоичными - "Да"или" Нет ".Я хочу, чтобы новая переменная была закодирована «Да», если любая из других переменных - «Да» и «Нет», если ни одна из них не закодирована «Да».Когда я запускаю ifelse, я получаю ожидаемое число «Да», но я ожидаю, что «Нет» - это NA.

Я пробовал следующее:

data$new <- ifelse(var1=="Yes" | var2=="Yes" | var3=="Yes","Yes","No")

Любая помощь будет принята с благодарностью.Я изменил имена данных и поместил три переменные в примере.Всего на самом деле 22 переменные с очень похожими именами, я попытался упростить пример.Если было бы полезно увидеть фактические данные / код, я добавлю это.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 29 мая 2019

== возвращает NA, если есть какой-либо NA. Можно было бы cbind переменные 'var1', 'var2', 'var3' (неясно, является ли это столбцом data.frame или независимыми векторами), сравнить с "Yes", чтобы создать логическую матрицу, используйте rowSums, чтобы получить сумму строк «Да». Обратите внимание на na.rm = TRUE, который позаботится об элементах NA (если есть). Используя суммы строк, убедитесь, что значение больше 0, затем «Да» или «Нет»

ifelse(rowSums(cbind(var1, var2, var3)== "Yes"), na.rm = TRUE) > 0, "Yes", "No")

Чтобы проверить, почему он производит NA

v1 <- c("Yes", "No", NA)
v2 <- c("No", NA, "Yes")

(v1 == "Yes")|(v2 == "Yes")
#[1] TRUE   NA TRUE
0 голосов
/ 29 мая 2019

попробуйте complete.cases () пропустить NA при создании переменной

df$new <- ifelse((var1 =="Yes"| var2=="Yes"|var3=="Yes")& complete.cases(df), "Yes", "No")


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