R:如何对分组数据同时使用 summarize 和 do 函数

R: How to use summarize and do function together on grouped data

在 tidyverse 中,summarize 可用于具有单值函数的分组数据。例如

mtcars %>% group_by(cyl) %>% summarise(max(cos(mpg)))

如果函数是向量值的,那么如果我没记错的话,推荐使用do。例如,do 命令适用于 phych 包中的向量值函数 'describe':

 library(psych)
 mtcars %>% group_by(cyl) %>% do(describe(.$mpg))

如何同时对分组数据应用单值函数和向量值函数?例如,如何将 max(cos()) 和 describe() 应用到 mpg 列,并将输出作为一个数据帧?

我们可以将 describe 的输出放在 summarise 中的 list 中,然后 unnest

library(tidyverse)
mtcars %>% 
    group_by(cyl) %>%
    summarise(Cosmpg = max(cos(mpg)), list(describe(mpg))) %>%
    unnest
# A tibble: 3 x 15
#    cyl Cosmpg  vars     n  mean    sd median trimmed   mad   min   max range   skew kurtosis    se
#  <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>   <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>    <dbl> <dbl>
#1  4.00  0.743  1.00 11.0   26.7  4.51   26.0    26.4  6.52  21.4  33.9 12.5   0.259   -1.65  1.36 
#2  6.00  0.939  1.00  7.00  19.7  1.45   19.7    19.7  1.93  17.8  21.4  3.60 -0.158   -1.91  0.549
#3  8.00  0.989  1.00 14.0   15.1  2.56   15.2    15.2  1.56  10.4  19.2  8.80 -0.363   -0.566 0.684