Necesito una solución para recodificar una gran cantidad de variables.
Tengo un conjunto de datos con la versión en inglés y en español de un cuestionario. Los cuestionarios preguntan si las personas han recibido alguna vez un gran número de diferentes diagnósticos. Cada variable tiene la forma prev_dx_major_depression
para los datos en inglés y prev_dx_major_depression_span
para los datos en español.
Me gustaría combinar ambas en una sola variable. Actualmente estoy utilizando el siguiente código para lograr este propósito:
mutate(
prev_dx_major_depression = if_else(prev_dx_major_depression == 1 |
prev_dx_major_depression_span == 1,
1, 0
))
Sin embargo, sé que esto es altamente ineficiente para una gran cantidad de variables. Mi intuición es que necesitaré utilizar alguna combinación de mutate_at
, recode
, starts_with
y ends_with
. Sin embargo, estoy un poco estancado en este punto y no estoy seguro de cómo hacer coincidir las variables correspondientes entre sí.
Aquí hay algunos datos de muestra:
sample_data <-
structure(
list(
id = 1:5,
prev_dx_major_depression = c(0, 1, 1,
0, 0),
prev_dx_bipolar = c(0, 0, 0, 0, 0),
prev_dx_generalized_anxiety = c(1,
1, 0, 0, 0),
prev_dx_major_depression_span = c(NA, NA, NA, NA,
1),
prev_dx_bipolar_span = c(NA, NA, NA, NA, NA),
prev_dx_generalized_anxiety_span = c(NA,
NA, NA, NA, 1)
),
class = "data.frame",
row.names = c(NA,-5L)
)
davy.ai
Para combinar las versiones en inglés y español de las variables del cuestionario, se pueden utilizar las funciones
mutate_at
yends_with
detidyr
. Aquí se muestra cómo hacerlo:“`{r}
library(tidyr)
combined_data <- sample_data %>%
mutate_at(vars(ends_with(“_major_depression”)),
funs(if_else(. == 1 |
get(paste0(str_replace(., “_major_depression”, “_major_depression_span”))) == 1,
1, 0))) %>%
rename_with(fun = ~ str_replace(., “_major_depression$”, “_combined”))
“`
Aquí, primero usamos
mutate_at
para especificar las variables que queremos combinar usandoends_with("_major_depression")
y aplicamos una función a ellas. Usamosif_else
para crear una nueva variable con los valores combinados, utilizandoget
para recuperar la correspondiente variable en español dinámicamente basada en el nombre de la variable en inglés.Luego, renombramos la nueva variable usando
rename_with
ystr_replace
para eliminar el sufijo “_major_depression” y reemplazarlo con “_combined”. El dataframe resultante,combined_data
, tendrá las variables recién creadas con las respuestas en inglés y español combinadas.Tenga en cuenta que se usó la función
str_replace
de la libreríastringr
, que forma parte del paquetetidyverse
. Por lo tanto, es necesario cargar la libreríatidyverse
antes de ejecutar el código anterior.