Я пытаюсь создать новую переменную на основе других переменных в моем наборе данных. Я использовал ifelse для выполнения аналогичных задач, однако, когда я попробовал это на этот раз, я получаю NA, когда условие не выполняется.
Все переменные, на которых я хочу основывать новую переменную, являются двоичными - "Да" или "Нет". Я хочу, чтобы новая переменная была закодирована «Да», если какая-либо из других переменных «Да» и «Нет», если ни одна из них не закодирована «Да». Когда я запускаю ifelse, я получаю ожидаемое число «Да», но я ожидаю, что «Нет» будет NA.
Я пробовал следующее:
data$new <- ifelse(var1= = "Yes" | var2= = "Yes" | var3= = "Yes","Yes","No")
Любая помощь будет принята с благодарностью. Я изменил имена данных и поместил в пример три переменные. На самом деле всего 22 переменных с очень похожими именами, я попытался упростить пример. Если будет полезно увидеть фактические данные/код, я добавлю это.
Спасибо!
==
возвращает 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
Спасибо, это было проблемой. Я думал, что уже разобрался с отсутствующими данными, но оказалось, что нет. Большое спасибо за вашу помощь.
попробуйте complete.cases(), чтобы опустить NA при создании переменной
df$new <- ifelse((var1 = = "Yes"| var2= = "Yes"|var3= = "Yes")& complete.cases(df), "Yes", "No")
Это может быть потому, что у вас есть
NA
элементы в одном из 'var's