Мы можем использовать pmax
data1$case <- do.call(pmax, c(data1, na.rm = TRUE))
data1$case
#[1] 2 1 1 2 NA
Что касается случая ОП с NA
, ==
возвращает NA
для любого элемента, который является NA
.Итак, нам нужно позаботиться о NA
с добавлением условия (& !is.na(ME)
- для обоих столбцов)
with(data1, ifelse((ME == 2 & !is.na(ME)) | (PDR == 2 & !is.na(PDR)),
2, ifelse(is.na(ME) &is.na(PDR), NA, 1)))
#[1] 2 1 1 2 NA
ПРИМЕЧАНИЕ: ==
для проверки NA
не рекомендуется, так как тамявляются функциями для получения логического вектора, когда отсутствуют значения (is.na
, complete.cases
)
data
data1 <- structure(list(ME = c(1L, NA, NA, 1L, NA), PDR = c(2L, 1L, 1L,
2L, NA)), class = "data.frame", row.names = c(NA, -5L))