• 主页
  • 课程

    关于课程

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

    同等学历教学

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

      作为一个R语言学习者,R语言的强大功能,给我的工作带来极大便利。它之所以好用,很大程度上依赖于它有着一批好用的R包。与数据相关的各种动作,都有相应的R包可以支撑。


      实际工作中,我们碰到的数据通常是不能直接用于分析和建模的。在这之前,我们需要做数据的整理,以生成可用于后续分析和建模的整洁数据集。dplyr就是一个用于数据整理的R包。

      关于数据的整理,它包含了丰富的内容,罗列如下:

      1. 从列的角度看,有列的选择,列的删除,列的重命名,列的变换,列的增加等

      2. 从行的角度看,有行的选择,行的增加,行的删除等

      3. 从数据集整体看,有数据的集成,数据的聚合,数据的子集获取等


      上面这些数据操作,dplyr包可以灵活地进行实现。


      在本文,记录dplyr包对列做选择的各种方法。

      我们以R包自带的数据集为例子,演示用dplyr包进行各种不同需求的列选择,同时,为了让代码更加的精简,文中代码大多数用管道方式来组织。


      第一步:加载所需R包和相应数据集

      1library(magrittr) # 提供管道操作
      2library(dplyr) # 用于数据的整理操作
      3library(tidyverse) # 用于使用数据集msleep


      我们使用msleep数据集做例子。在进行列的选择之前,我们先查看msleep数据集的结构。


      第二步:数据集结构查看

      1msleep %>% glimpse() # 使用glimpse函数


      这个数据集有83行,11列,有6列是字符型,6列是数值型。


      对数据集的结构有个概况后,我们接下来可以实现各种不同需求的列选择操作了。

      第三步:列选择的示范

      3.1 选择少量感兴趣的列

      1msleep %>% 
      2  select(name, order, awake) %>%
      3  glimpse()



      3.2 选择连续的列

      1msleep %>%
      2  select(name:order, awake:bodywt) %>%
      3  glimpse()



      3.3 列选择的逆向操作,使用-号,删除不要的列,也就实现了所选择的列

      1msleep %>%
      2  select(-name, -(awake:bodywt)) %>%
      3  glimpse()



      3.4 基于列名子串做选择

      采用了一种包含的逻辑关系,常用函数starts_with(), end_with()和contains()。

      1msleep %>%
      2  select(starts_with('sleep')) %>%
      3  glimpse()
      4msleep %>%
      5  select(contains('eep')) %>%
      6  glimpse()
      7msleep %>%
      8  select(ends_with('e')) %>%
      9  glimpse()


      3.5 基于正则表达式选择列

      利用正则表达式表示列中某一种模式,以实现列的匹配和选择。

      1msleep %>%
      2  select(matches("o.+er")) %>%
      3  glimpse


      这个正则表达式用于匹配包含“o”,后跟一个或多个其他字母和“er”的任何列。


      3.6 基于预定义的列清单做列选择

      可以使用one_of()函数或者!!操作符。

      1classification <- c("name", "genus", "vore")
      2
      3msleep %>%
      4  select(!!classification) %>%
      5  glimpse 
      6
      7msleep %>%
      8  select(one_of(classification)) %>%
      9  glimpse 

      3.7 基于列的数据类型做列选择

      使用select_if()函数结合列的数据类型判断函数is.numeric, is.double, is.character, is.factor, is.logical等。

      1msleep %>%
      2  select_if(is.character) %>%
      3  glimpse


      若是需要传递自己定义的函数,需要在前面添加波浪线~,例如,与上面效果等价的写法:

      1msleep %>%
      2  select_if(~!is.numeric(.)) %>%
      3  glimpse


      3.8 基于逻辑表达式的列选择

      例1,选择数值型列,并且列的均值要大于5

       1msleep %>%
      2  select_if(is.numeric) %>%
      3  select_if(~mean(., na.rm=TRUE) > 5) %>%
      4  glimpse()
      5
      6# 或者
      7
      8msleep %>%
      9  select_if(~is.numeric(1) & mean(., na.rm=TRUE) > 5) %>%
      10  glimpse()


      例2,选择每个列唯一取值个数大于10的列

      1msleep %>%
      2  select_if(~n_distinct(.) > 10) %>%
      3  glimpse

      3.9 列选择的其它用途

      例1,用于调换列的顺序

      例2,用于列的重命名

      例3,对所选择的例批量小写化或者大写化

      例4,对列名做清洗

      例5,添加行的名称这一列

       1# 1) 列的顺序调换
      2msleep %>%
      3  select(awake, name, everything()) %>%
      4  glimpse 
      5
      6# 2) 列的重命名
      7msleep %>% 
      8  select(name1 = name, vore1 = vore, bodywt) %>%
      9  glimpse
      10# 3) 对所有的列做大写或者小写处理
      11msleep %>%
      12  select_all(toupper) %>%
      13  glimpse()
      14# 4) 对选择列的做清洗处理
      15msleep2 <- select(msleep, name, sleep_total, brainwt)
      16colnames(msleep2) <- c("name", "sleep total", "brain weight")
      17
      18msleep2 %>%
      19  select_all(~str_replace(., " ", "_")) %>%
      20  glimpse 
      21
      22msleep2 <- select(msleep, name, sleep_total, brainwt)
      23colnames(msleep2) <- c("Q1 name", "Q2 sleep total", "Q3 brain weight")
      24msleep2[1:3,]
      25msleep2 %>%
      26  select_all(~str_replace(., "Q[0-9]+", "")) %>% 
      27  select_all(~str_replace(., " ", "_")) 
      28
      29# 5) 对行名成添加为一列
      30mtcars %>%
      31  tibble::rownames_to_column("car_model") %>%
      32  head


      关于列的选择,你还有那些需求或者场景,请留言。


      参考资料:

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

      2https://dplyr.tidyverse.org/


      附录:完整代码

        1###################
      2#dplyr包
      3#列选择的方法
      4##################
      5# 第一步:加载R包和相应数据集
      6library(magrittr) # 提供管道操作
      7library(dplyr) # 用于数据的整理操作
      8library(tidyverse) # 用于使用数据集msleep
      9
      10# 第二步:数据集结构查看
      11msleep %>% glimpse()
      12
      13# 第三步:列选择的示范
      14# 3.1 选择几个感兴趣的列
      15msleep %>% 
      16  select(name, order, awake) %>%
      17  glimpse()
      18
      19# 3.2 选择连续的列
      20msleep %>%
      21  select(name:order, awake:bodywt) %>%
      22  glimpse()
      23
      24
      25# 3.3 列选择的逆向操作
      26msleep %>%
      27  select(-name, -(awake:bodywt)) %>%
      28  glimpse()
      29
      30# 3.4 基于列的子串做选择
      31msleep %>%
      32  select(starts_with('sleep')) %>%
      33  glimpse()
      34msleep %>%
      35  select(contains('eep')) %>%
      36  glimpse()
      37msleep %>%
      38  select(ends_with('e')) %>%
      39  glimpse()
      40
      41# 3.5 基于正则表达式的列的选择
      42msleep %>%
      43  select(matches("o.+er")) %>%
      44  glimpse
      45
      46# 3.6 基于预定义的列清单做列选择
      47classification <- c("name", "genus", "vore")
      48
      49msleep %>%
      50  select(!!classification) %>%
      51  glimpse 
      52
      53msleep %>%
      54  select(one_of(classification)) %>%
      55  glimpse 
      56
      57# 3.7 基于列的数据类型选择列
      58msleep %>%
      59  select_if(is.character) %>%
      60  glimpse
      61
      62msleep %>%
      63  select_if(~!is.numeric(.)) %>%
      64  glimpse
      65
      66# 3.8 基于逻辑表达式的列选择
      67msleep %>%
      68  select_if(is.numeric) %>%
      69  select_if(~mean(., na.rm=TRUE) > 5) %>%
      70  glimpse()
      71
      72# 或者
      73
      74msleep %>%
      75  select_if(~is.numeric(1) & mean(., na.rm=TRUE) > 5) %>%
      76  glimpse()
      77
      78msleep %>%
      79  select_if(~n_distinct(.) > 10) %>%
      80  glimpse
      81
      82# 3.9 列选择的其它用途
      83# 1) 列的调换顺序
      84msleep %>%
      85  select(awake, name, everything()) %>%
      86  glimpse 
      87
      88# 2) 列的重命名
      89msleep %>% 
      90  select(name1 = name, vore1 = vore, bodywt) %>%
      91  glimpse
      92# 3) 对所有的列做大写或者小写处理
      93msleep %>%
      94  select_all(toupper) %>%
      95  glimpse()
      96# 4) 对选择列的做清洗处理
      97msleep2 <- select(msleep, name, sleep_total, brainwt)
      98colnames(msleep2) <- c("name", "sleep total", "brain weight")
      99
      100msleep2 %>%
      101  select_all(~str_replace(., " ", "_")) %>%
      102  glimpse 
      103
      104msleep2 <- select(msleep, name, sleep_total, brainwt)
      105colnames(msleep2) <- c("Q1 name", "Q2 sleep total", "Q3 brain weight")
      106msleep2[1:3,]
      107msleep2 %>%
      108  select_all(~str_replace(., "Q[0-9]+", "")) %>% 
      109  select_all(~str_replace(., " ", "_")) 
      110
      111# 5) 对行名成添加为一列
      112mtcars %>%
      113  tibble::rownames_to_column("car_model") %>%
      114  head


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

      推荐阅读:   

      1 R语言机器学习3本经典书籍集合本,提高你的R语言和机器学习能力!(可供下载)

      2 R语言实战英文书籍,配套源代码,帮助你学习R语言!(可下载)


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

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


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

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      PCA应用于虚构的人物个性
      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年
      在线支付 激活码

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