• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      未分类

      • 首页
      • 博客
      • 未分类
      • dplyr包-汇总数据的方法

      dplyr包-汇总数据的方法

      • 发布者 weinfoadmin
      • 分类 未分类
      • 日期 2021年9月9日
      • 评论 0评论

      专题介绍:R是一种广泛用于数据分析和统计计算的强大语言,于上世纪90年代开始发展起来。得益于全世界众多 爱好者的无尽努力,大家继而开发出了一种基于R但优于R基本文本编辑器的R Studio(用户的界面体验更好)。也正是由于全世界越来越多的数据科学社区和用户对R包的慷慨贡献,让R语言在全球范围内越来越流行。其中一些R包,例如MASS,SparkR, ggplot2,使数据操作,可视化和计算功能越来越强大。R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。R作为一种统计分析软件,是集统计分析与图形显示于一体的。它可以运行于UNIX、Windows和Macintosh的操作系统上,而且嵌入了一个非常方便实用的帮助系统,相比于其他统计分析软件,R的学术性开发比较早,适合生物学和医学等学术学科的科研人员使用。

      是新朋友吗?记得先点R语言关注我哦~
      《R包学习》专栏·第4篇
      文 | R学习者
      3188字 | 10分钟阅读
      【R语言】已开通R语言社群,五湖四海,天南地北,各行各业,有缘相聚,共享R事,雕刻数据,求解问题,以创价值。喜乐入群者,请加微信号luqin360,或扫描文末二维码,添加为好友,同时附上R-入群。有朋自远方来,不亦乐乎,并诚邀入群,以达相互学习和进步之美好心愿。

      这是dplyr包系列第四篇文章。前三篇文章如下:

      1 dplyr包-列选择的方法

      2 dplyr包-列变换的方法

      3 dplyr包-行选择的方法


      前三篇文章,我们已经从数据的行与列角度,总结了dplyr包有效而高效地进行行与列的操作和处理,灵活使用dplyr包的函数集,便利我们对数据的整理工作。本文介绍dplyr包做数据汇总的方法。数据汇总有很多应用场景,例如我们熟知而常用的分组统计,即采用分组的思维+聚合的运算;数据的描述性统计与分析等。本文的数据汇总,主要介绍以下内容:1统计变量取值的分布,可以观察单一变量或者多个变量的取值分布情况(列联表的效果);2计算观察数,汇总数据集的行数,宏观感知样本的大小;3数据聚合运算和4数据分组聚合运算,有时候需要通过整体聚合或者分组聚合来观察和理解数据;5所有变量数据聚合运算、6基于条件选择变量的聚合运算和7指定变量的聚合运算,基于条件式的对满足条件的变量做聚合操作,条件的方式包括全满足、条件式满足或者指定性满足;8针对聚合运算的结果做有序操作,对聚合后的结果做有序处理,更便利解读数据;9Top-k的操作,从聚合后的结果里面摘选TopK的数据。


      和前面的文章一样,我们还是采用R自带的数据集msleep。这个数据集来自于ggplot2包,可以通过ggplot2::msleep的方式加载数据集。这个数据集是关于哺乳动物的睡眠数据集,它包括83行和11个变量。它可以帮助研究者定量理解哺乳动物睡眠情况。这个数据集的详细介绍以及关于每个变量对应的含义,可以通过R语言的帮助文档查看,使用help(ggplot2::msleep)或者?ggplot2::msleep的方式打开帮助文档。部分结果如下图所示:



      第一步:加载R包和数据集

      1# 第一步:加载R包和数据集
      2library(pacman)
      3p_load(dplyr)
      4msleep <- ggplot2::msleep
      5msleep %>% glimpse 


      第二步:数据汇总操作示范

      1 统计变量取值的分布

      统计数据集某一个特定变量的取值分布情况,使用count()函数,参数sort=True表示降序操作

      1msleep %>%
      2  count(order, sort = TRUE)


      当count()函数使用多个变量的时候,可以实现列联表的功能。


      2 计算观察数

      计算观察数,可以使用tally()函数,若是需要这个结果添加为一列,可以使用add_tally()函数

      1msleep %>% 
      2  tally
      3
      4msleep %>%
      5  select(1:3) %>%
      6  add_tally %>%
      7  head  



      思考题:若是需要把某一个变量的取值分布结果添加到数据集,如何实现?可以采用add_count()函数


      3 数据聚合运算

      聚合运算使用summarise()函数,可作用于各种聚合函数,例如均值函数,最小值函数,最大值函数等。

      1msleep %>%
      2  summarise(n = n()
      3            , average = mean(sleep_total)
      4            , maximum = max(sleep_total))


      4 数据分组聚合运算

      使用group_by()函数与summarise()函数综合处理。

      1msleep %>%
      2  group_by(vore) %>%
      3  summarise(n = n()
      4            , average = mean(sleep_total)
      5            , maximum = max(sleep_total))


      思考题:请总结常用的聚合函数?例如n()函数,n_distinct()函数,sum()函数,min()函数,max()函数,mean()函数,median()函数,sd()函数和IQR()函数等。这些函数分别表示什么作用?


      若是需要把某一个变量的取值分布结果添加到数据集,如何实现?可以采用add_count()函数


      5 所有变量数据聚合运算

      使用summarise_all()函数实现基于所有变量的聚合运算。

      1msleep %>%
      2  group_by(vore) %>%
      3  summarise_all(~mean(., na.rm = TRUE) + 5)


      6 基于条件选择变量的聚合运算

      使用summarise_if()函数做基于条件选择满足要求的变量参与聚合运算,常用的条件判断函数有:

      is.numeric,is.integer,is.double,is.logical,is.factor,lubridate::is.POSIXt或者lubridate::is.Date

      1msleep %>%
      2  group_by(vore) %>%
      3  summarise_if(is.numeric, mean, na.rm=TRUE) %>%
      4  head 


      思考题:请问下面这个代码片段实现什么功能?

      1msleep %>%
      2  group_by(vore) %>%
      3  summarise_if(is.numeric, mean, na.rm=TRUE) %>%
      4  rename_if(is.numeric, ~paste0("avg_", .)) 


      7指定变量的聚合运算

      使用summarise_at()函数实现指定变量聚合运算,需要vars()来帮助选择指定的变量。

      1msleep %>%
      2  group_by(vore) %>%
      3  summarise_at(vars(contains("sleep")), mean, na.rm=TRUE) %>%
      4  rename_at(vars(contains("sleep")), ~paste0("avg_", .)) 


      8针对聚合运算的结果做有序操作

      针对聚合运算的结果做有序操作,这是数据分析经常需要使用,方便我们更好地解读数据。使用arrange()函数,默认是升序,借助desc()函数帮忙,以实现降序。

      1msleep %>%
      2  group_by(vore) %>%
      3  summarise(avg_sleep = mean(sleep_total)) %>%
      4  arrange(desc(avg_sleep))


      若是需要在每个组里面做排序,把arrange()函数的参数.by_group设置为TRUE就好。

      思考题:请问下面这个代码片段实现什么功能?

      1msleep %>%
      2  select(order, name, sleep_total) %>%
      3  group_by(order) %>%
      4  arrange(desc(sleep_total), .by_group = TRUE)


      9 Topk的操作

      针对聚合运算的结果做Topk操作,可以使用top_n()函数,例如:选择前6个最小值或者最大值。

       1msleep %>%
      2  group_by(order) %>%
      3  summarise(average = mean(sleep_total)) %>%
      4  top_n(5)
      5
      6msleep %>%
      7  group_by(order) %>%
      8  summarise(average = mean(sleep_total)) %>%
      9  top_n(-5)
      10
      11msleep %>%
      12  group_by(order) %>%
      13  summarise(average_sleep = mean(sleep_total), max_sleep = max(sleep_total)) %>%
      14  top_n(5, average_sleep)


      补充:在介绍行选择的时候,我们还可以对行做随机选择。比方说,我们建模的时候,要对样本做随机划分,可以使用sample_n()函数或者sample_frac()函数。我们也可以使用slice()函数,对行按着我们指定的位置做切片操作。


      1msleep %>%
      2  sample_n(10)
      3
      4msleep %>%
      5  sample_frac(.2)
      6
      7msleep %>%
      8  slice(10:40)



      总结:

      dplyr包是一个强大数据整理包,提供丰富地函数,可以对数据的行与列,数据的汇总做方便而有效地加工。大家在后续使用实际数据的过程中,肯定要对数据做整理,可以使用dplyr包来帮助完成好这个工作。


      思考题的答案可以留言或者加入R语言群交流和和讨论。


      完整代码:

        1###########
      2#dplyr包-汇总数据
      3##########
      4
      5# 第一步:加载R包和数据集
      6library(pacman)
      7p_load(dplyr)
      8msleep <- ggplot2::msleep
      9msleep %>% glimpse 
      10
      11# 第二步:数据汇总示范
      12# 1 统计变量取值的分布
      13msleep %>%
      14  count(order, sort = TRUE)
      15
      16msleep %>%
      17  count(order, vore, sort = TRUE)
      18
      19# 2 计算观察数
      20msleep %>% 
      21  tally
      22
      23msleep %>%
      24  select(1:3) %>%
      25  add_tally %>%
      26  head  
      27
      28msleep %>%
      29  select(name:vore) %>%
      30  add_count(vore) %>% 
      31  head 
      32
      33# 3 数据聚合运算
      34msleep %>%
      35  summarise(n = n()
      36            , average = mean(sleep_total)
      37            , maximum = max(sleep_total))
      38
      39# 4 数据分组聚合运算
      40msleep %>%
      41  group_by(vore) %>%
      42  summarise(n = n()
      43            , average = mean(sleep_total)
      44            , maximum = max(sleep_total))
      45
      46# 5 所有变量的聚合运算
      47msleep %>%
      48  group_by(vore) %>%
      49  summarise_all(~mean(., na.rm = TRUE) + 5) %>%
      50  head 
      51
      52# 6 基于条件选择的变量的聚合运算
      53msleep %>%
      54  group_by(vore) %>%
      55  summarise_if(is.numeric, mean, na.rm=TRUE) %>%
      56  head 
      57
      58msleep %>%
      59  group_by(vore) %>%
      60  summarise_if(is.numeric, mean, na.rm=TRUE) %>%
      61  rename_if(is.numeric, ~paste0("avg_", .)) 
      62
      63# 7 基于指定变量的聚合运算
      64msleep %>%
      65  group_by(vore) %>%
      66  summarise_at(vars(contains("sleep")), mean, na.rm=TRUE) %>%
      67  rename_at(vars(contains("sleep")), ~paste0("avg_", .))
      68
      69# 8 针对聚合运算做有序操作
      70msleep %>%
      71  group_by(vore) %>%
      72  summarise(avg_sleep = mean(sleep_total)) %>%
      73  arrange(desc(avg_sleep))
      74
      75msleep %>%
      76  select(order, name, sleep_total) %>%
      77  group_by(order) %>%
      78  arrange(desc(sleep_total), .by_group = TRUE)
      79
      80# 9 TopK操作
      81msleep %>%
      82  group_by(order) %>%
      83  summarise(average = mean(sleep_total)) %>%
      84  top_n(5)
      85
      86msleep %>%
      87  group_by(order) %>%
      88  summarise(average = mean(sleep_total)) %>%
      89  top_n(-5)
      90
      91msleep %>%
      92  group_by(order) %>%
      93  summarise(average_sleep = mean(sleep_total), max_sleep = max(sleep_total)) %>%
      94  top_n(5, average_sleep)
      95
      96
      97# 补充行的随机选择
      98msleep %>%
      99  sample_n(10)
      100
      101msleep %>%
      102  sample_frac(.2)
      103
      104msleep %>%
      105  slice(10:40)



      参考资料:

      1https://suzan.rbind.io/2018/04/dplyr-tutorial-4/


      你在阅读中,遇到什么问题,或者有什么心得与收获,可以扫描我的微信号,备注“R-入群”。我会邀请你加入R语言群,和大家一起讨论与学习。

      R书籍推荐  

      1 复杂数据统计方法-基于R的应用(第三版)

      2 数据科学实战

      3 R数据科学

      4  数据挖掘与R语言


      公众号推荐

      数据科学与人工智能

      数据科学与人工智能公众号推广Python语言,数据科学与人工智能的知识和信息。扫码下方二维码关注我,一起学习Python语言和数据科学与人工智能。


      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      统计推断与数据科学,moderndive和tidyverse包
      2021年9月9日

      下一篇文章

      数据挖掘与R语言
      2021年9月9日

      你可能也喜欢

      2-1675088548
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      30 1月, 2023
      9-1675131201
      如何快速批量修改 Git 提交记录中的用户信息
      26 1月, 2023
      8-1678501786
      肿瘤细胞通过改变CD8+ T细胞中的丙酮酸利用和琥珀酸信号来调控抗肿瘤免疫应答。
      7 12月, 2022

      留言 取消回复

      要发表评论,您必须先登录。

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?