Создание новой условной факторной переменной из нескольких двоичных переменных в R - PullRequest
0 голосов
/ 06 января 2020

Мне нужно создать новую трехуровневую категориальную переменную, которая отражает, умер ли субъект от передозировки определенного класса наркотиков. Уровни могут быть примерно такими: «Только класс А», «Только класс В», «Класс А + класс В».

В пределах фрейма данных существует множество (около 90) различных переменных отдельных препаратов, которые являются бинарными переменными (0/1), которые указывают, было ли это лекарство обнаружено в токсикологии субъекта. Что мне нужно сделать, так это найти способ создать эту новую переменную фактора, которая сообщит нам, если один из, скажем, 25, препаратов класса А был найден у этого индивидуального субъекта, а затем присвоит новой переменной фактора значение «Класс A» или «Класс A + Класс B» в зависимости от того, присутствовал ли препарат класса B.

Я поражен тем, с чего начать. Есть предложения?

1 Ответ

0 голосов
/ 06 января 2020

Без воспроизводимого примера я могу объяснить вам шаги, которые могут работать. Поскольку вы перегружены тем, с чего начать, мы надеемся, что это даст вам представление о том, как думать о решении подобных проблем.

1) Во-первых, нам нужно знать, какие лекарства относятся к классу А и классу В. Предполагая, что у вас есть эта информация, вы можете разделить два класса на их собственные фреймы данных (сохраните оригинал)

2) Далее нам нужно знать, содержал ли субъект какое-либо лекарство. Мы можем сделать это, создав новый столбец в каждом фрейме данных, который ИСТИНА или ЛОЖЬ. Условие, которое мы проверим, состоит в том, что сумма строки больше 0. Если значение true, то хотя бы у одного лекарства должно быть значение 1. Например:

df.class.A$has.drug <- ifelse(rowSums(df.class.A > 0, TRUE, FALSE)

3) Нам нужно Теперь создайте столбец в исходном фрейме данных, проверив три условия.

df$drugs <- ifelse(df.class.A$has.drug == TRUE, 
                   ifelse(df.class.B$has.drug == TRUE, 'Class A and B', 'Class A'), 
                   ifelse(df.class.B$has.drug == TRUE, 'Class B', 'NONE'))

Первый ifelse говорит: «Если у нас есть класс A, проверьте, есть ли у нас класс B, в противном случае, проверьте, есть ли у нас класс B» .

Второй ifelse говорит: «У нас есть класс A, поэтому, если у нас есть класс B, тогда укажите« класс A и B », если у нас нет класса B, тогда просто укажите« класс A ».

Последний говорит: «У нас нет класса A, поэтому, если у нас есть класс B, тогда просто укажите« Class B », если у нас нет класса B, то у нас ничего нет, поэтому укажите« none »(вы также можно поставить NA или что-нибудь еще).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...