es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe un bucle para mutar una nueva columna basada en varias columnas ascendentes existentes con valores ascendentes?

Mi conjunto de datos se ve algo así:

med_1_atc    med_2_atc   med_3_atc   
N06AX07      N06AX07     N06AX07        
N06AX07               
N06AX09      N06AX07     N06AG07        
N06AD07               
M06AX07              
D06FX07              
L06TX07      N06AX07     N06AX07 

Quiero crear una nueva variable med_use que tenga la etiqueta 1 si alguna variable que termine con _atc tiene un código que comienza con NO6A.

Debería verse algo así:

med_1_atc    med_2_atc   med_3_atc    med_use   
N06AX07      N06AX07     N06AX07         1        
N06AX07                                  1
N06AX09      N06AX07     N02BE07         1       
N06AD07                                  1              
M06AX07              
D06FX07              
L06TX07                  N06AX07         1      

He utilizado el siguiente código:

df <- mutate(df, 
            med_use = case_when(
                      ends_with("_atc", "NO6A") ~ 1,
                      TRUE ~ NA_real_
              ))  
Tags:  

Answer

  1. Avatar for davy.ai

    Para crear una nueva variable med_use que etiquete como 1 si alguna variable que termina con _atc tiene un código que comienza con N06A, puedes usar el siguiente código en tidyverse:

    library(tidyverse)
    
    df <- data.frame(
      med_1_atc = c("N06AX07", "N06AX07", "N06AX09", "N06AD07", "M06AX07", "D06FX07", "L06TX07"),
      med_2_atc = c("N06AX07", NA, "N06AX07", "N06AX07", NA, NA, "N06AX07"),
      med_3_atc = c("N06AX07", "N06AX07", "N06AG07", NA, NA, NA, "N06AX07")
    )
    
    df <- df %>% 
      mutate(med_use = ifelse(
        grepl(pattern = "^N06A", x = select(., ends_with("_atc"))) == TRUE, 
        1, NA))
    

    En este código, primero creamos un dataframe utilizando los mismos datos proporcionados en la pregunta. Luego, utilizamos la función mutate() para crear una nueva variable med_use. Hacemos esto utilizando la función ifelse(), que verifica si el patrón ^N06A (cualquier cadena que comience con N06A) existe en algún nombre de columna que termine con _atc. Si existe, asignamos 1 a med_use, y si no existe, asignamos NA. Finalmente, almacenamos este dataframe actualizado en df. El dataframe resultante tendrá una variable med_use que etiqueta como 1 si alguna de las variables que terminan con _atc tiene un código que comienza con N06A.

Comments are closed.