查看: 922|回复: 6

[R语言] tidyverse|数据分析常规操作-分组汇总(sumamrise+group_by)

[复制链接]

版主

Rank: 10Rank: 10Rank: 10

主题
33
注册时间
2016.3.21
在线时间
125 小时

活跃会员突出贡献


发表于 2020.7.6 22:56:30 | 显示全部楼层 |阅读模式
使用tidyverse进行简单的数据处理:盘一盘Tidyverse| 筛行选列之select,玩转列操作
盘一盘Tidyverse| 只要你要只要我有-filter 筛选行
Tidyverse|数据列的分分合合,一分多,多合一
Tidyverse| XX_join :多个数据表(文件)之间的各种连接本次介绍变量汇总以及分组汇总。

一 summarize汇总
汇总函数 summarise(),可以将数据框折叠成一行  ,多与group_by()结合使用
1.1 summarise完成指定变量的汇总
统计均值,标准差,最小值,个数和逻辑值
[AppleScript] 纯文本查看 复制代码
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完成一类变量的汇总
[AppleScript] 纯文本查看 复制代码
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,可以更灵活的筛选符合条件的列,然后进行汇总
[AppleScript] 纯文本查看 复制代码
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分组,变量汇总
[AppleScript] 纯文本查看 复制代码
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):返回  唯一值的数量。
[AppleScript] 纯文本查看 复制代码
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函数进行计数:
[AppleScript] 纯文本查看 复制代码
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) 则可以找出比例  .
[AppleScript] 纯文本查看 复制代码
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

参考资料:
  https://r4ds.had.co.nz/   
书籍:《R数据科学》


【觉得不错,右下角点个“在看”,期待您的转发,谢谢!】

               

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2020.6.29
在线时间
4 小时

发表于 2020.7.9 16:53:12 | 显示全部楼层
很棒的教程!
加油!
回复 支持 反对

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2020.7.8
在线时间
1 小时

发表于 2020.7.9 21:32:10 | 显示全部楼层
代码好难,对于0基础来说
每天进步一点点
回复 支持 反对

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2019.3.28
在线时间
3 小时

发表于 2020.7.10 09:16:22 | 显示全部楼层
谢谢分享
大家加油
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2020.6.29
在线时间
4 小时

发表于 2020.7.15 15:45:51 | 显示全部楼层
谢谢分享!!!
加油!
回复

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2020.7.6
在线时间
1 小时

发表于 2020.7.24 15:11:49 | 显示全部楼层
萌新在努力看懂中
签到,签到,每天一打卡
回复 支持 反对

使用道具 举报

钵水母

Rank: 3Rank: 3

主题
0
注册时间
2020.7.23
在线时间
2 小时

最佳新人


发表于 2020.7.27 08:04:20 | 显示全部楼层
感谢分享!!!
今天也是元气满满的一天啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表