Есть ли способ сгенерировать новую переменную, только если она соответствует определенным критериям? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь воспроизвести следующий код Stata в R:

gen UAPDL_1=sqrt((((Sanchez_1-Iglesias_1)^2)+((Casado_1-Iglesias_1)^2)+((Rivera_1-Iglesias_1)^2))/3) if maxIglesias_1==1

replace UAPDL_1=sqrt((((Sanchez_1-Rivera_1)^2)+((Casado_1-Rivera_1)^2)+((Iglesias_1-Rivera_1)^2))/3) if maxRivera_1==1

Другими словами, я пытаюсь произвести разные вычисления и сгенерировать новую переменную с разными значениями в зависимости от определенных условий (в этом в случае, они имеют значение 1. в другой переменной. Мне удалось создать переменные, которые должны быть выполнены для расчета (maxIglesias == 1 и maxRivera == 1), но я застрял в генерации переменной UAPDL. Я попробовал с case_when и ifelse, но в этих случаях эти команды позволяют вам определять только определенное значение. Есть ли способ с помощью mutate или dplyr (или любого другого пакета) для достижения этой цели?

1 Ответ

0 голосов
/ 18 июня 2020

Добро пожаловать в SO!

Позвольте мне попытаться «разобрать» ваш вопрос для ясности.

Вы хотите сгенерировать переменную UAPDL в зависимости от значения двух различных переменных (maxIglesias_1 и maxRivera_1, которые, скажем, соответствуют значениям f (I) и f (R) соответственно). Здесь я отмечаю, что согласно фрагменту кода, который вы опубликовали, нет гарантии, что две переменные являются взаимоисключающими, т.е. у вас могут быть записи с maxIglesias_1 == 1 И maxRivera_1 == 1. В этих случаях порядок в котором вы запускаете команды, имеет значение, поскольку все они в конечном итоге получают значение f (R) или f (I), если вы их перекручиваете.

Однако, чтобы реплицировать опубликованные вами команды Stata (проблема с включенным порядком!), Вы должны запустить

UAPDL_1 <- numeric(length(maxIglesias_1)) # generate the vector
UAPDL_1[maxIglesias_1 == 1] <- f(I)
UAPDL_1[maxRivera_1 == 1] <- f(R)

, где я предполагаю, что maxIglesias_1 и maxIglesias_1 являются два объекта R той же длины, что и исходная матрица Stata.

Удачи!

...