首页 > 解决方案 > dplyr 中的“summarise_all”和计算/输出顺序的描述性统计

问题描述

计算描述性统计的功能dplyr非常棒,而且它的灵活性非常有用。我想知道是否可以自动更改计算顺序,因为现在它将每个函数应用于所有选定的变量,然后使用下一个函数进行。因此,输出列出了所有变量的最小值,然后是 25% 分位数,依此类推。我想知道是否可以连续显示每个变量的所有描述性统计数据。

library(data.table)
library(dplyr)
mtcars %>% 
  select(mpg, cyl, gear) %>% 
  group_by(gear) %>%
  summarise_all(.tbl = ., funs(min = min(.), 
                               q25 = quantile(., 0.25), 
                               median = median(.), 
                               q75 = quantile(., 0.75), 
                               max = max(.), 
                               mean = mean(.), 
                               sd = sd(.)), na.rm = TRUE) %>% 
  data.table(.)
# Output now
   gear mpg_min cyl_min mpg_q25 cyl_q25 mpg_median cyl_median mpg_q75 cyl_q75 mpg_max cyl_max mpg_mean cyl_mean   mpg_sd    cyl_sd
1:    3    10.4       4    14.5       8       15.5          8  18.400       8    21.5       8 16.10667 7.466667 3.371618 1.1872337
2:    4    17.8       4    21.0       4       22.8          4  28.075       6    33.9       6 24.53333 4.666667 5.276764 0.9847319
3:    5    15.0       4    15.8       4       19.7          6  26.000       8    30.4       8 21.38000 6.000000 6.658979 2.0000000

  # Desired Output - Excerpt
   gear mpg_min mpg_q25 mpg_median mpg_q75 mpg_max mpg_mean   mpg_sd cyl_min cyl_q25
1:    3    10.4    14.5       15.5  18.400    21.5 16.10667 3.371618       4       8
2:    4    17.8    21.0       22.8  28.075    33.9 24.53333 5.276764       4       4
3:    5    15.0    15.8       19.7  26.000    30.4 21.38000 6.658979       4       4

标签: rdplyr

解决方案


好的,可以进行一些小的调整,但我认为这非常好。我使函数的结果名称后缀按字母顺序排列,然后对除分组列之外的所有列进行排序。

mtcars %>% select(mpg, cyl, gear) %>% group_by(gear) %>%summarise_all(.tbl = ., funs(a_min = min(.)
                                                                                       , b_q25 = quantile(., 0.25) 
                                                                                       , c_median = median(.)
                                                                                       , d_q75 = quantile(., 0.75)
                                                                                       , e_max = max(.)
                                                                                       , f_mean = mean(.) 
                                                                                       , g_sd = sd(.)
), na.rm = TRUE) %>% select(gear, order(names(.)[-1])) 

推荐阅读