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.

Crear una columna condicionada a dos posibles niveles contenidos en otra columna.

Tengo el siguiente conjunto de datos

out 
# Un tibble: 1,356 x 7
      ID GROUP    Gender   Age Education tests      score
   <dbl> <chr>     <dbl> <dbl>     <dbl> <chr>      <dbl>
 1     1 ENTRENAMIENTO 1    74        18 ADAS_CogT0  14.7
 2     1 ENTRENAMIENTO 1    74        18 ROCF_CT0    32  
 3     1 ENTRENAMIENTO 1    74        18 ROCF_IT0     3.7
 4     1 ENTRENAMIENTO 1    74        18 ROCF_RT0     3.9
 5     1 ENTRENAMIENTO 1    74        18 PVF_T0      41.3
 6     1 ENTRENAMIENTO 1    74        18 SVF_T0      40  
 7     1 ENTRENAMIENTO 1    74        18 ADAS_CogT7  16  
 8     1 ENTRENAMIENTO 1    74        18 ROCF_CT7    33  
 9     1 ENTRENAMIENTO 1    74        18 ROCF_IT7     1.7
10     1 ENTRENAMIENTO 1    74        18 ROCF_RT7     2.4

Si quisiera crear una columna donde en lugar de las pruebas que terminan en T0 correspondiera el valor de score0, mientras que en lugar de las pruebas que terminan en T7, el valor sería score7, ¿Cuáles son las posibles formas de lograr esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Una posible forma de crear una nueva columna con los valores deseados sería usar un for-loop y dplyr. Primero, podemos crear una lista de todas las pruebas que terminen con “T0” y otra lista para las pruebas que terminen con “T7”. Luego, podemos recorrer cada prueba en el conjunto de datos y verificar si está en una de las listas. Si está en la lista “T0”, podemos crear la nueva columna con el valor “score0”. Si está en la lista “T7”, podemos crear la nueva columna con el valor “score7”. Finalmente, podemos usar la función mutate de dplyr para agregar la nueva columna al conjunto de datos. El código se vería así:

    library(dplyr)
    
    # Crear listas de pruebas que terminen con "T0" y "T7"
    tests_T0 <- c("ADAS_CogT0", "ROCF_CT0", "ROCF_IT0", "ROCF_RT0", "PVF_T0", "SVF_T0")
    tests_T7 <- c("ADAS_CogT7", "ROCF_CT7", "ROCF_IT7", "ROCF_RT7")
    
    # Recorrer cada prueba en el conjunto de datos y agregar nueva columna con el valor deseado
    for (test in unique(out$tests)) {
      if (test %in% tests_T0) {
        out[out$tests == test, "new_col"] <- "score0"
      } else if (test %in% tests_T7) {
        out[out$tests == test, "new_col"] <- "score7"
      }
    }
    
    # Usar la función mutate de dplyr para agregar la nueva columna al conjunto de datos
    out <- out %>% mutate(new_col = ifelse(is.na(new_col), "not_assigned", new_col))
    

    En el código anterior, agregamos un tercer valor posible a la nueva columna llamado “not_assigned” en caso de que hubiera pruebas que no coincidieran con ninguna de las listas.

Comments are closed.