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.

reordenar una columna numérica basándose en los niveles de otra columna

Me gustaría reordenar mi columna numérica de acuerdo a los niveles de factor de la columna group. Mis datos de prueba se ven así:

toy.df <- data.frame(group = c(rep(“C”,3), rep(“B”, 2),rep(“A”, 1)), num = c(rep(10, 3), rep(5,2), 20))
toy.df$group <- factor(toy.df$group, levels = c(‘B’, ‘A’, ‘C’))

La última línea de código no está funcionando. ¿Tiene alguna idea de cómo puedo establecer los niveles de la columna num utilizando los niveles de la columna group?

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Dado que la columna num es una columna numérica, no podemos establecer sus niveles directamente. En su lugar, podemos crear una nueva columna con el orden deseado basado en los niveles de group. Aquí está el código que logra esta tarea:

    library(dplyr)
    
    toy.df <- toy.df %>%
      mutate(num_order = if_else(group == "C", 1,
                                  if_else(group == "B", 2, 3))) %>%
      arrange(num_order, group) %>%
      select(-num_order)
    
    toy.df
    

    Este código primero crea una nueva columna num_order utilizando declaraciones condicionales. La función if_else() prueba si el valor de group es igual a C, B o A y asigna los valores correspondientes de 1, 2 o 3 a num_order. Luego, la función arrange() ordena el marco de datos primero por la columna num_order y luego por group. Finalmente, la función select() elimina la columna num_order del marco de datos.

    El marco de datos resultante debería lucir así:

      group num
    1     C  10
    2     C  10
    3     C  10
    4     B   5
    5     B   5
    6     A  20
    

    La columna num se reordena según los niveles de la columna group.

Comments are closed.