Почему это выражение ifelse создает NA?

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

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

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

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

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

Спасибо!

Это может быть потому, что у вас есть NA элементы в одном из 'var's

akrun 29.05.2019 18:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
200
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

== возвращает 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

Спасибо, это было проблемой. Я думал, что уже разобрался с отсутствующими данными, но оказалось, что нет. Большое спасибо за вашу помощь.

chan1612 30.05.2019 08:18

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

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


Другие вопросы по теме