Crear una nueva variable con la condición OR para múltiples variables.
Actualmente estoy trabajando con un conjunto de datos de violencia de género. Tengo varias dimensiones, como la violencia física, sexual o psicológica, y varios indicadores para cada dimensión, cada uno con un conjunto de entre 6 y 10 indicadores. Además, tengo dos medidas de tiempo: dentro de los últimos 12 meses y antes de los últimos 12 meses. En resumen, al menos estoy trabajando con 70 indicadores.
Tengo que crear una variable “en algún momento de la vida” que indique si una mujer sufrió violencia en cualquier dimensión, en cualquier período de tiempo. Por lo tanto, si una mujer indica sí en cualquiera de los 70 indicadores, sufrió violencia en algún momento de su vida.
Mi pregunta es cómo puedo crear esa nueva variable más rápidamente, porque lo único que estoy pensando es algo como:
base <- base %>% mutate(newvariable= case_when(v1 == 1 | v2 == 1 | v3 == 1 ~ … 1))
Pero tengo 70 variables. Entonces, ¿puedo crear esta nueva variable con una condición o dentro de un rango de variables?
davy.ai
Sí, puedes crear la nueva variable utilizando un rango de variables en lugar de enumerar explícitamente cada variable en la instrucción
case_when
.Una opción es utilizar la función
contains
del paquetedplyr
para seleccionar variables que contengan una cierta cadena, como “violencia”. Por ejemplo:{r}
base <- base %>%
mutate(algun_punto_en_la_vida = case_when(
any_vars(contains("violencia") == 1) ~ 1,
TRUE ~ 0
))
Esto seleccionará todas las variables que contengan “violencia” en su nombre y comprobará si alguna de ellas tiene un valor de 1. Si es así, la nueva variable “algun_punto_en_la_vida” recibirá un valor de 1; de lo contrario, recibirá un valor de 0.
Ten en cuenta que la función
any_vars
verifica si alguna de las variables seleccionadas cumple la condición (es decir, contiene “violencia” y tiene un valor de 1) y devuelve un vector de valoresTRUE
oFALSE
. La instruccióncase_when
asigna entonces un valor de 1 o 0 en función de los valoresTRUE
oFALSE
devueltos porany_vars
.Este método debería ser más eficiente que enumerar las 70 variables en la instrucción
case_when
. Sin embargo, supone que todas las variables relacionadas con la violencia contienen la cadena “violencia” en su nombre. Si esto no es así, es posible que necesites utilizar un método diferente para seleccionar las variables relevantes.