• 主页
  • 课程

    关于课程

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

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (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包学习》专栏·第3篇
      文 | R学习者
      2352字 | 6分钟阅读
      【R语言】已开通R语言社群,五湖四海,天南地北,各行各业,有缘相聚,共享R事,雕刻数据,求解问题,以创价值。喜乐入群者,请加微信号luqin360,或扫描文末二维码,添加为好友,同时附上R-入群。有朋自远方来,不亦乐乎,并诚邀入群,以达相互学习和进步之美好心愿。

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

      1 dplyr包-列选择的方法

      2 dplyr包-列变换的方法


      前两篇文章是从数据列的角度做选择和变换处理。这篇文章是从数据行的角度,描写行选择的一系列操作与方法。数据的行,可以看作为观察、样例、对象等。




      数据的行选择,主要包括如下内容:

      1 基于比较运算的行选择

      2 基于字符匹配的行选择

      3 基于正则模式的行选择

      4 基于多条件的行选择

      5 跨越多列的行选择


      我们以R自带数据,采用管道的操作,演示行选择的具体操作和实现。


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

      1# 第一步:R包和自带数据集
      2library(pacman)
      3p_load(tidyverse)
      4# 使用msleep数据集
      5msleep %>% glimpse
      6msleep %>% head


      第二步:行选择操作实例

      行选择,灵活使用filter()函数


      1 基于比较运算的行选择

      适合于数值型变量,使用>,<,>=,<=,==或者!=比较关系运算符号

       1# 1 比较运算的行选择
      2msleep %>% 
      3  select(name, sleep_total) %>% 
      4  filter(sleep_total > 12) %>%
      5  head 
      6
      7msleep %>% 
      8  select(name, sleep_total) %>% 
      9  filter(between(sleep_total, 12, 18)) %>% 
      10  head 


      between()函数用来确定一个闭区间。

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

      1msleep %>% 
      2  select(name, sleep_total) %>% 
      3  filter(near(sleep_total, 17, tol = sd(sleep_total))) %>%
      4  head 


      2 基于字符匹配的行选择

      使用比较运算符号或者%in%运算或者布尔逻辑关系,构建满足要求的过滤逻辑。

       1msleep %>% 
      2  select(order, name, sleep_total) %>% 
      3  filter(order == "Didelphimorphia") %>%
      4  head 
      5
      6msleep %>% 
      7  select(order, name, sleep_total) %>% 
      8  filter(order %in% c("Didelphimorphia", "Diprotodontia")) %>% 
      9  head
      10
      11remove <- c("Rodentia", "Carnivora", "Primates")
      12msleep %>% 
      13  select(order, name, sleep_total) %>% 
      14  filter(!order %in% remove) %>% 
      15  head 


      3 基于正则模式的行选择

      使用grepl()函数或者stringr包的str_detect()函数,利用正则模式,设计和构建满足要求的行选择逻辑。

      1msleep %>% 
      2  select(name, sleep_total) %>% 
      3  filter(str_detect(tolower(name), pattern = "mouse")) %>%
      4  head 



      4 基于多条件的行选择

      通过多条件关系和布尔逻辑关系,构建满足需求和更复杂的行选择逻辑。

      1msleep %>% 
      2  select(name, order, sleep_total:bodywt) %>% 
      3  filter(bodywt > 100, (sleep_total > 15 | order != "Carnivora")) %>% 
      4  head 
      5
      6msleep %>% 
      7  select(name, sleep_total, brainwt, bodywt) %>% 
      8  filter(brainwt > 1, !bodywt > 100)

      5 跨越多列的行选择

      根据列的逻辑选择满足某种模式的行,会用到filter_all()函数,filter_if()函数,filter_at()函数。

      1)filter_all()函数

      选择所有列或者任意列满足某种逻辑的行选择

       1# 1)filter_all()
      2msleep %>% 
      3  select(name:order, sleep_total, -vore) %>% 
      4  filter_all(any_vars(str_detect(., pattern = "Ca"))) %>% 
      5  head 
      6
      7msleep %>%  
      8  select(name, sleep_total:bodywt) %>% 
      9  filter_all(any_vars(. < 0.1)) %>% 
      10  head
      11
      12msleep %>%  
      13  select(name, sleep_total:bodywt, -awake) %>% 
      14  filter_all(all_vars(. > 1)) %>% 
      15  head


      2)filter_if()函数

      首先,选择if条件为真的列,然后针对这些列类似filter_all()的操作

      1# 2) filter_if()
      2msleep %>% 
      3  select(name:order, sleep_total:sleep_rem) %>% 
      4  filter_if(is.character, any_vars(is.na(.))) %>% 
      5  head 


      3)filter_at()函数

      与filter_if()函数对比发现,通过人为指定为真的列,然后针对这些列类似filter_all()的操作

      1msleep %>% 
      2  select(name, sleep_total:sleep_rem, brainwt:bodywt) %>% 
      3  filter_at(vars(sleep_total, sleep_rem), all_vars(.>5)) %>% 
      4  head
      5
      6msleep %>% 
      7  select(name, sleep_total:sleep_rem, brainwt:bodywt) %>% 
      8  filter_at(vars(contains("sleep")), all_vars(.>5)) %>% 
      9  head  


      总结:行选择,就是基于需求,设计和构建行选择逻辑,使用filter()函数或者filter函数变体,以实现行选择的目的。


      完整代码:

       1################
      2#dplyr包行选择的方法
      3###############
      4
      5# 第一步:R包和自带数据集
      6library(pacman)
      7p_load(tidyverse)
      8# 使用msleep数据集
      9msleep %>% glimpse
      10msleep %>% head
      11
      12# 第二步:行选择
      13# 1 比较运算的行选择
      14msleep %>% 
      15  select(name, sleep_total) %>% 
      16  filter(sleep_total > 12) %>%
      17  head 
      18
      19msleep %>% 
      20  select(name, sleep_total) %>% 
      21  filter(between(sleep_total, 12, 18)) %>% 
      22  head 
      23
      24msleep %>% 
      25  select(name, sleep_total) %>% 
      26  filter(near(sleep_total, 17, tol = sd(sleep_total))) %>%
      27  head 
      28
      29# 字符匹配的行选择
      30msleep %>% 
      31  select(order, name, sleep_total) %>% 
      32  filter(order == "Didelphimorphia") %>%
      33  head 
      34
      35msleep %>% 
      36  select(order, name, sleep_total) %>% 
      37  filter(order %in% c("Didelphimorphia", "Diprotodontia")) %>% 
      38  head
      39
      40remove <- c("Rodentia", "Carnivora", "Primates")
      41msleep %>% 
      42  select(order, name, sleep_total) %>% 
      43  filter(!order %in% remove) %>% 
      44  head 
      45
      46# 3 基于正则模式的行选择
      47msleep %>% 
      48  select(name, sleep_total) %>% 
      49  filter(str_detect(tolower(name), pattern = "mouse")) %>%
      50  head 
      51
      52# 4 基于多条件的行选择
      53msleep %>% 
      54  select(name, order, sleep_total:bodywt) %>% 
      55  filter(bodywt > 100, (sleep_total > 15 | order != "Carnivora")) %>% 
      56  head 
      57
      58msleep %>% 
      59  select(name, sleep_total, brainwt, bodywt) %>% 
      60  filter(brainwt > 1, !bodywt > 100) %>% 
      61  head
      62
      63# 跨越多列的行选择
      64# 1)filter_all()
      65msleep %>% 
      66  select(name:order, sleep_total, -vore) %>% 
      67  filter_all(any_vars(str_detect(., pattern = "Ca"))) %>% 
      68  head 
      69
      70msleep %>%  
      71  select(name, sleep_total:bodywt) %>% 
      72  filter_all(any_vars(. < 0.1)) %>% 
      73  head
      74
      75msleep %>%  
      76  select(name, sleep_total:bodywt, -awake) %>% 
      77  filter_all(all_vars(. > 1)) %>% 
      78  head
      79
      80# 2) filter_if()
      81msleep %>% 
      82  select(name:order, sleep_total:sleep_rem) %>% 
      83  filter_if(is.character, any_vars(is.na(.))) %>% 
      84  head 
      85
      86
      87
      88# 3) filter_at()
      89msleep %>% 
      90  select(name, sleep_total:sleep_rem, brainwt:bodywt) %>% 
      91  filter_at(vars(sleep_total, sleep_rem), all_vars(.>5)) %>% 
      92  head
      93
      94msleep %>% 
      95  select(name, sleep_total:sleep_rem, brainwt:bodywt) %>% 
      96  filter_at(vars(contains("sleep")), all_vars(.>5)) %>% 
      97  head  


      参考资料:

      1https://suzan.rbind.io/2018/02/dplyr-tutorial-3/


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

      推荐阅读:   

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

      2 dplyr包-列变换的方法

      3 dplyr包-列选择的方法


      推荐公众号:数据科学与人工智能

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


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

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      R语言可视化-----ggplot2 核心概念
      2021年9月9日

      下一篇文章

      PDFMV框架-它是什么?
      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年
      在线支付 激活码

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