R сравнить два столбца вернуть третий столбец, если любой столбец соответствует условиям - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть набор данных: data1, в котором есть столбцы ME и PDR.

Я хочу создать этот третий столбец: случай, который будет выглядеть следующим образом:

ME PDR case
1   2   2
NA  1   1
NA  1   1
1   2   2
NA  NA  NA

Я пытался использоватьэта команда, но она не возвращает мне 1, когда у меня есть 1 в любом столбце и нет 2 в любом из них.

data1$case=ifelse(data1$ME==2 | data1$PDR==2 ,2,ifelse(data1$ME==NA & data1$PDR==NA,NA,1))

1 Ответ

0 голосов
/ 12 декабря 2018

Мы можем использовать 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...