Объедините несколько бинарных переменных в 1 в R - PullRequest
0 голосов
/ 03 марта 2020

Вот история:

У меня есть набор данных со многими двоичными переменными (1 = да и 0 = нет). Дело в том, что многие из этих переменных одинаковы, но написаны по-разному. Пример:

  • близнецы
    • gemelli
    • DCDA
    • MCDA
    • близнец DCDA
    • близнец MCDA
    • ...

Все зависит от доктора / его привычек / его настроения / его грамотности. Если наблюдение получает «1» для любой из указанных выше переменных, это означает, что будут близнецы (беременность). Теперь, чтобы сделать некоторые прогнозы и прочее о близнецах, мне нужно сгруппировать все те наблюдения, которые имеют «1» в любой из этих возможных переменных (иногда даже в 2 из них).

Вот что я попробовал:

features <- mutate(features,
                   TWIN_P = ifelse("twins" == 1 |
                                      "gemelli" == 1 |
                                      "DCDA" == 1 |
                                      "MCDA" == 1 |
                                      "twin DCDA" == 1 |
                                      "twin MCDA" == 1 , 
                                      "1", "0"))

Но когда я смотрю на новую переменную TWIN_P, я получаю 0 двойников ... Что, конечно, невозможно.

Может кто-нибудь сказать мне, что я делаю не так? Бинарные переменные являются числовыми. Я пытался сделать это между "" или без них. Но на самом деле ничего не получалось.

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Я не совсем уверен, как выглядит ваш фрейм данных, поэтому вот замена:

twins <- rbinom(n=10, size=1, prob=0.2) 
gemelli <- rbinom(n=10, size=1, prob=0.2)
DCDA <- rbinom(n=10, size=1, prob=0.2)
MCDA <- rbinom(n=10, size=1, prob=0.2)
twin_DCDA <- rbinom(n=10, size=1, prob=0.2)
twin_MCDA <- rbinom(n=10, size=1, prob=0.2)

df1 <- data.frame(twins, gemelli, DCDA, MCDA, twin_DCDA, twin_MCDA)

Затем rowSums для тех, которые больше 0, что приведет к выводу TRUE или FALSE. Поместите это в as.integer, которое преобразует TRUE / FALSE в 0 или 1:

df1 %>% 
  mutate(
    TWIN_P = as.integer(rowSums(.)>0)
  )
1 голос
/ 03 марта 2020

Как упомянуто @Edward - не заключайте в кавычки имена переменных. Поскольку у вас есть два имени переменных с пробелом, вы можете использовать обратные метки: `twin DCDA` Как правило, вам следует избегать пробелов в именах столбцов.

Кроме того, здесь есть другой подход с базой R для проверки, если таковые имеются значение столбца 1:

set.seed(123)

df <- data.frame(matrix(rbinom(36, 1, .1), ncol = 6))
colnames(df) = c('twins', 'gemelli', 'DCDA', 'MCDA', 'twin DCDA', 'twin MCDA')

cbind(df, TWIN_P = as.numeric(apply(df, 1, function(x) any(x == 1))))

Выход

  twins gemelli DCDA MCDA twin DCDA twin MCDA TWIN_P
1     0       0    0    0         0         1      1
2     0       0    0    1         0         1      1
3     0       0    0    0         0         0      0
4     0       0    0    0         0         0      0
5     1       1    0    0         0         0      1
6     0       0    0    1         0         0      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...