Split a data frame column containing a list into multiple columns using dplyr (or otherwise)

后端 未结 4 1608
面向向阳花
面向向阳花 2020-12-18 00:43

Consider the following example data

library(dplyr)
tmp <- mtcars %>%
    group_by(cyl) %>%
    summarise(mpg_sum = list(summary(mpg)))
4条回答
  •  时光说笑
    2020-12-18 01:25

    We can use data.table. Convert the 'data.frame' to 'data.table' (as.data.table(mtcars)), grouped by 'cyl', we get the summary of 'mpg' and convert it to list

    library(data.table)
    as.data.table(mtcars)[, as.list(summary(mpg)), by = cyl]
    #    cyl Min. 1st Qu. Median  Mean 3rd Qu. Max.
    #1:   6 17.8   18.65   19.7 19.74   21.00 21.4
    #2:   4 21.4   22.80   26.0 26.66   30.40 33.9
    #3:   8 10.4   14.40   15.2 15.10   16.25 19.2
    

    Or using only dplyr, after grouping by 'cyl', we use do to do the same operation as above.

    library(dplyr)
    mtcars %>%
         group_by(cyl) %>%
         do(data.frame(as.list(summary(.$mpg)), check.names=FALSE) )
    #   cyl  Min. 1st Qu. Median  Mean 3rd Qu.  Max.
    #             
    #1     4  21.4   22.80   26.0 26.66   30.40  33.9
    #2     6  17.8   18.65   19.7 19.74   21.00  21.4
    #3     8  10.4   14.40   15.2 15.10   16.25  19.2
    

    Or using purrr

    library(purrr)
    mtcars %>% 
         slice_rows("cyl") %>% 
         select(mpg) %>%
         by_slice(dmap, summary, .collate= "cols")
    

提交回复
热议问题