• Software 13.06.2019

    Algunos lectores de este blog valoran la facilidad de procesamiento de tablas de algunos programas populares como SPSS. Más allá de la facilidad del manejo de sus procedimientos, la versatilidad de las tablas resultantes es evidente. Para los que, como yo, queremos aplicar todo en dplyr, existe una solución al problema de la generación de tablas desagregadas con una estadística de resumen sobre la base de datos entera; algo así como un gran total, o gran media, o gran algo. Este problema fue planteado primero en StackOverflow (ver acá) y en esta entrada se presenta una adaptación.

    Lo primero que se puede considerar es crear la tabla desagregada con el comando group_by, luego generar la medida de resumen sobre toda la base de datos, para finalmente pegar las consultas con el comando rbind. Considere el siguiente código que genera la tabla deseada:

    library(dplyr)
    data("mtcars")
    
    p1 <- mtcars %>% 
      group_by(cyl) %>%
      summarise(mean(mpg))
    
    p2 <- mtcars %>% 
      summarise(mean(mpg))
    
    as.data.frame(rbind(p1, c("Total", unlist(p2))))
    
        cyl        mean(mpg)
    1     4             26.6
    2     6             19.7
    3     8             15.1
    4 Total           20.1
    

    La solución más eficiente es utilizar el comando mutate_at y bind_rows sobre la base de datos original y después agruparlos, para finalmente obtener la tabla deseada.

    mtcars %>% 
      mutate_at(vars(cyl), funs(as.character(.))) %>%
      bind_rows(mutate(., cyl = "Total")) %>%
      group_by(cyl) %>%
      summarise(mean(mpg))
    
    # A tibble: 4 x 2
      cyl   `mean(mpg)`
      <chr>       <dbl>
    1 4            26.7
    2 6            19.7
    3 8            15.1
    4 Total        20.1
    

    admin @ Jueves, 13 de junio de 2019

  • Comentarios cerrados