tidyverse|数据分析常规操作-分组汇总(sumamrise+group_by)

简介: tidyverse|数据分析常规操作-分组汇总(sumamrise+group_by)

本文首发于“生信补给站”公众号  https://mp.weixin.qq.com/s/tQt0ezYJj3H7x3aWZmKVEQ


使用tidyverse进行简单的数据处理:

盘一盘Tidyverse| 筛行选列之select,玩转列操作

盘一盘Tidyverse| 只要你要只要我有-filter 筛选行

Tidyverse|数据列的分分合合,一分多,多合一

Tidyverse| XX_join :多个数据表(文件)之间的各种连接

本次介绍变量汇总以及分组汇总


一 summarize汇总

汇总函数 summarise(),可以将数据框折叠成一行  ,多与group_by()结合使用


1.1 summarise完成指定变量的汇总

统计均值,标准差,最小值,个数和逻辑值

library(dplyr)
iris %>%
   summarise(mean(Petal.Length), #无命名
    sd_pet_len = sd(Petal.Length,na.rm = TRUE), #命名
             min_pet_len = min(Petal.Length),
             n = n(),
            any(Sepal.Length > 5))
# mean(Petal.Length) sd_pet_len min_pet_len   n any(Sepal.Length > 5)
#1             3.758   1.765298           1 150                 TRUE

常用函数:

  • Center  位置度量  : mean(), median()
  • Spread   分散程度度量  : sd(), IQR(), mad()
  • Range   秩的度量  : min(), max(), quantile()
  • Position   定位度量  : first(), last(), nth(),
  • Count   计数  : n(), n_distinct()
  • Logical   逻辑值的计数和比例  : any(), all()


1.2 , summarise_if完成一类变量的汇总

iris %>%
    summarise_if(is.numeric, ~ mean(., na.rm = TRUE))
# Sepal.Length Sepal.Width Petal.Length Petal.Width
#1     5.843333   3.057333       3.758   1.199333


1.3,summarise_at完成指定变量的汇总

summarise_at配合vars,可以更灵活的筛选符合条件的列,然后进行汇总

iris %>%
    summarise_at(vars(ends_with("Length"),Petal.Width),
    list(~mean(.), ~median(.)))
# Sepal.Length_mean Petal.Length_mean Petal.Width_mean Sepal.Length_median Petal.Length_median
#1         5.843333             3.758         1.199333                 5.8               4.35
# Petal.Width_median
#1               1.3

二 group_by 分组汇总


group_by() summarise() 的组合构成了使用 dplyr 包时最常用的操作之一:分组摘要


2.1 按照Species分组,变量汇总

iris %>%
    group_by(Species) %>%
     summarise(avg_pet_len = mean(Petal.Length),
     sd_pet_len = sd(Petal.Length),
             min_pet_len = min(Petal.Length),
             first_pet_len = first(Petal.Length),
            n_pet_len = n())
# A tibble: 3 x 6
# Species   avg_pet_len sd_pet_len min_pet_len first_pet_len n_pet_len
# <fct>           <dbl>     <dbl>       <dbl>         <dbl>     <int>
#1 setosa           1.46     0.174         1             1.4       50
#2 versicolor       4.26     0.470         3             4.7       50
#3 virginica         5.55     0.552         4.5           6         50


2.2 计数

  • n() :无需参数返回当前分组的大小;
  • sum(!is.na(x)) :返回非缺失值的梳理;
  • n_distinct(x):返回  唯一值的数量。

iris %>%
group_by(Species) %>%
   summarise( n_pet_len = n(),
             noNA_n_pet_len =  sum(!is.na(Petal.Length)),
        Petal.Length_uniq_n = n_distinct(Petal.Length)
   )
# A tibble: 3 x 4
# Species   n_pet_len noNA_n_pet_len Petal.Length_uniq_n
# <fct>         <int>         <int>               <int>
#1 setosa           50             50                   9
#2 versicolor       50             50                 19
#3 virginica         50             50                 20
 除此之外,还可以用dplyr的count函数进行计数:
iris %>%
count(Species)
# A tibble: 3 x 2
# Species       n
# <fct>     <int>
#1 setosa       50
#2 versicolor   50
#3 virginica     50


2.3 逻辑值的计数和比例

当与数值型函数一同使用时, TRUE 会转换为 1, FALSE 会转换为 0。

这使得 sum() 和 mean() 非常适用于逻辑值:sum(x) 可以找出 x 中 TRUE 的数量, mean(x) 则可以找出比例  .

iris %>%
group_by(Species) %>%
   summarise( n_pet_len = n(),
             noNA_n_pet_len =  sum(!is.na(Petal.Length)),
        Petal.Length_uniq_n = n_distinct(Petal.Length),
             Petal.Length_uniq_n2 = sum(n_distinct(Petal.Length) >= 20)
   )
# A tibble: 3 x 5
# Species   n_pet_len noNA_n_pet_len Petal.Length_uniq_n Petal.Length_uniq_n2
# <fct>         <int>         <int>               <int>               <int>
#1 setosa           50             50                   9                   0
#2 versicolor       50             50                 19                   0
#3 virginica         50             50                 20                   1
相关文章
|
11月前
|
数据挖掘 Python
【Python数据分析】用Python操作Excel,xlsxwriter的使用介绍
【Python数据分析】用Python操作Excel,xlsxwriter的使用介绍
|
8月前
|
数据挖掘 索引 Python
【100天精通Python】Day60:Python 数据分析_Pandas高级功能-数据透视表pivot_table()和数据交叉表crosstab()常用功能和操作
【100天精通Python】Day60:Python 数据分析_Pandas高级功能-数据透视表pivot_table()和数据交叉表crosstab()常用功能和操作
131 0
|
8月前
|
存储 并行计算 数据挖掘
【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能
【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能
76 2
|
8月前
|
数据挖掘 索引 Python
【100天精通Python】Day57:Python 数据分析_Pandas数据描述性统计,分组聚合,数据透视表和相关性分析
【100天精通Python】Day57:Python 数据分析_Pandas数据描述性统计,分组聚合,数据透视表和相关性分析
59 0
|
8月前
|
SQL 数据挖掘 数据库
【100天精通Python】Day54:Python 数据分析_Pandas入门基础,核心数据结构Serise、DataFrame、Index对象,数据的导入操作
【100天精通Python】Day54:Python 数据分析_Pandas入门基础,核心数据结构Serise、DataFrame、Index对象,数据的导入导出操作
136 0
|
10月前
|
人工智能 数据挖掘 Linux
ChatGPT × R语言 丨实际数据分析过程中,AI能够带来哪些改变?数据框操作案例分享
ChatGPT × R语言 丨实际数据分析过程中,AI能够带来哪些改变?数据框操作案例分享
|
12月前
|
数据挖掘 API
淘宝商品数据分析怎么操作?从哪些方面下手?
淘宝商品数据分析怎么操作?从哪些方面下手?
|
数据挖掘 索引 Python
数据分析-Pandas分组聚合
数据分析-Pandas分组聚合
77 0
数据分析-Pandas分组聚合
|
SQL 关系型数据库 MySQL
Python数据分析之利用pymysql操作数据库
Python数据分析之利用pymysql操作数据库
Python数据分析之利用pymysql操作数据库
|
存储 数据挖掘 BI
【python数据分析】数据的分组,遍历,统计
数据的分组,遍历,统计 俗话说:“人与类聚,物以群分”,到这里我们将学习数据的分组以及分组后统计。Pandas的分组相对于Excel会更加简单和灵活。
【python数据分析】数据的分组,遍历,统计