ITPub博客

首页 > > > 【R语言】tidyverse之七:分组汇总

【R语言】tidyverse之七:分组汇总

作者:浪花小雨滴 时间:2020-06-17 10:46:51 0 删除 编辑

分组汇总,相当于 Excel 的透视表功能。

一. 创建分组

对未分组的数据框,一些操作如 mutate() 是在所有行上执行——或者说,整个数据框是一个分组,所有行都属于它。

若数据框被分组,则这些操作是分别在每个分组上独立执行。可以认为是,将数据框拆分为更小的多个数据框。在每个更小的数据框上执行操作,最后再将结果合并回来。

用 group_by() 函数创建分组,用 groups() 查看数据框的分组,用 ungroup() 解除分组。

dat <- warpbreaks %>%
  group_by(wool, tension) 

dat %>%
  groups() 
dat %>%
  ungroup() %>%
  groups()

二. 分组汇总

对数据框做分组最主要的目的就是做分组汇总,汇总就是以某种方式组合行,用 dplyr 包中的summarise() 实现,结果只保留分组列和新创建的列。

(1)summarise()

summarise() 可以与很多自带或自定义的汇总函数连用,常用的汇总函数有:

  • n() - 观测数;
  • n_distinct(var) - 变量 var 的唯一值数目;
  • sum(var), max(var), min(var), …
  • mean(var), median(var), sd(var), IQR(var), …
  • …
iris %>%
  group_by(Species) %>%
  summarise(n = n(),
            avg_len = mean(Petal.Length, na.rm=TRUE),
            med_len = median(Petal.Length))

函数 summarise() 也有一些作用域的变种:

  • summarise_if():对满足条件的列,执行一个或多个函数;
  • summarise_at():对选定的变量列,执行一个或多个函数;
  • summarise_all():对所有列,执行一个或多个函数。

使用它们的好处是,可以借助辅助选择器或判断条件选择多列,还能在这些列上执行多个函数,只需要将它们放入一个列表。

(2)summarise_if()

dat <- iris %>%
  group_by(Species) %>%
  summarise_if(is.numeric, list(~mean(.), ~median(.), ~min(.), ~max(.)))

这样得到的 dat 是一个 3 行 17 列的宽表(部分):

重塑为更具可读性的长表:

dat %>%
  pivot_longer(-Species, 
               names_to = c("Vars", ".value"), 
               names_sep = "_") 

(3)summarise_all()

iris %>%
  group_by(Species) %>%
  summarise_all(mean, na.rm=TRUE)

(4)summarise_at()

iris %>%
  group_by(Species) %>%
  summarise_at(vars(ends_with("Length")), mean)

三. 分组计数

按分类变量 order 和 vore 分组,并按分组大小排序:

msleep %>%
  count(order, vore, sort = TRUE)

用 add_count(...) 可为数据集增加一列按 ... 分组的计数:

msleep %>%
  select(name:vore) %>%
  add_count(vore)

主要参考文献:

  1. Desi Quintans, Jeff Powell. Working in the Tidyverse. hiercourse.com/
  2. SuZan. Data Wrangling Part 4: Summarizing and slicing your data. suzan.rbind.io/2018/04/
  3. Garrett Grolemund, Hadley Wickham. R for Data Science. r4ds.had.co.nz/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3162095/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Hbase中的LSM树
下一篇: 什么是数据结构
请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    4259
  • 访问量
    39917