本文转载自"R语言",已获授权。

dplyr软件包是R中功能最强大,最受欢迎的软件包之一。该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等。本文包括一些示例和如何使用使用dplyr软件包来清理和转换数据。这是一个关于数据操作和数据处理的完整教程。

什么是dplyr?

dplyr是一个强大的R软件包,用于处理,清理和汇总非结构化数据。简而言之,它使得R中的数据探索和数据操作变得简单快捷。

dplyr有什么特别之处?

软件包“dplyr”包含许多主要使用的数据操作功能,例如应用过滤器,选择特定列,排序数据,添加或删除列以及聚合数据。这个包的另一个最重要的优点是学习和使用dplyr函数非常容易。也很容易回想起这些功能。例如,filter()用于过滤行。

dplyr与基本R函数

dplyr函数处理速度比基本R函数快。 这是因为dplyr函数是以计算有效的方式编写的。 它们在语法上也更稳定,并且比向量更好地支持数据帧。

SQL查询与dplyr

数十年来人们一直在使用SQL来分析数据。 每个现代数据分析软件如Python,R,SAS等都支持SQL命令。 但SQL从未被设计为执行数据分析。 它专为查询和管理数据而设计。 有许多数据分析操作在SQL失败或使简单的事情困难。 例如,计算多个变量的中位数,将宽格式数据转换为长格式等。而dplyr软件包的设计目的是进行数据分析。

dplyr函数的名称类似于SQL命令,如用于选择变量的select(),group_by() - 通过对变量进行分组来组合数据,join() - 将两个数据集合在一起。 还包括inner_join()和left_join()。 它也支持SQL常用的子查询。

如何安装和加载dplyr软件包

要安装dplyr软件包,请键入以下命令。

install.packages("dplyr")

要加载dplyr包,请在下面输入命令

library(dplyr)

常用的dplyr的函数

数据:各国的收入数据

在本教程中,我们使用以下数据,其中包含2002年至2015年各州产生的收入。注意:此数据不包含各州的实际收入数据。

该数据集包含51个观测值(行)和16个变量(列)。 下面显示了数据集前6行的快照。

如何加载数据

提交以下代码。 在下面的代码中更改文件路径。

mydata <- read.csv("http://bailab.genetics.ac.cn/markdown/R/dplyr/sampledata.csv")


实例1:随机选择N行

sample_n函数从数据框(或表)中随机选择行。 函数的第二个参数告诉R要选择的行数。

sample_n(mydata, 3)


实例2:随机选择总行的N%

sample_frac函数随机返回N%的行。 在下面的例子中,它随机返回10%的行。

sample_frac(mydata, 0.1)


实例3:基于所有变量(完整行)删除重复行

distinct函数用于消除重复行

y = rbind(head(mydata), head(mydata))
dim(y)
x1 <-  dplyr::distinct(y)
dim(x1)

在此数据集中,我们取前6行重复一次共12行,去冗余返回6行

实例4:基于单个变量删除重复行

.keep_all函数用于保留输出数据框中的所有其他变量。

x2 <- dplyr::distinct(mydata, Index, .keep_all= TRUE)dim(x2)

按某列去冗余,52行变为19行,只保留第一次出现的行

实例5:基于多个变量删除重复行

在下面的例子中,我们使用两个变量 - Index,Y2010来确定唯一性。

x3 <-  dplyr::distinct(mydata, Index, Y2010, .keep_all= TRUE)


实例6:选择变量(或列)

假设你被要求只选择几个变量。 下面的代码选择变量“Index”,从“State”到“Y2008”的列。

mydata2 <- select(mydata, Index, State:Y2008)


实例7:删除变量

变量前面的减号表示R放弃变量。

mydata3 <- select(mydata, -Index, -State)

上面的代码也可以写成:

mydata4 <- select(mydata, -c(Index, State))


实例8:选择或删除以”Y”开始的变量

starts_with()函数用于选择以字母开头的变量。

mydata5 <- select(mydata, starts_with('Y'))

在starts_with()之前添加一个负号表示将删除以’Y’开始的变量

mydata6 <- select(mydata, -starts_with('Y'))

以下函数可帮助您根据名称选择变量。

实例9:选择变量名中包含”l”的变量

mydata7 <- select(mydata, contains('l'))


实例10:重新排列变量

下面的代码保持变量’State’在前面,其余的变量跟随其后。

mydata8 <- select(mydata, State, everything())


实例11:变量重命名

rename函数可用于重命名变量。
在下面的代码中,我们将’Index’变量重命名为’Index1’。

mydata9 <- rename(mydata, Index1=Index)
names(mydata9)


实例12:选择行

假设你需要子集数据。 您想过滤行并仅保留Index等于A的那些值。

mydata10 <- filter(mydata, Index == "A")


实例13:多重选择标准

%in%运算符可用于选择多个项目。 在下面的程序中,我们告诉R选择Index列中的’A’和’C’行。

mydata11 <- filter(mydata, Index %in% c("A", "C"))


实例14:选择标准中的’AND’条件

假设你需要应用’AND’条件。 在这种情况下,我们在“索引”栏中选择’A’和’C’的数据,并在2002年收入超过130万美元。

mydata12 <- filter(mydata, Index %in% c("A", "C") & Y2002 >= 1300000 )


实例15:选择标准中的’OR’条件

‘|’表示逻辑条件中的或。 它意味着这两个条件中的任何一个。

mydata13 <- filter(mydata, Index %in% c("A", "C") | Y2002 >= 1300000)


实例16:非条件

“!” 符号用于反转逻辑条件。

mydata13 <- filter(mydata, !Index %in% c("A", "C"))


实例17:包含条件

grepl函数用于搜索模式匹配。 在下面的代码中,我们正在查找state列包含“Ar”的记录。

mydata17 <- filter(mydata, grepl("Ar", State))


实例18:总结选定的变量

在下面的例子中,我们计算了变量Y2015的平均值和中位数。

summarise(mydata, Y2015_mean = mean(Y2015), Y2015_med=median(Y2015))


实例19:总结多个变量

在下面的例子中,我们计算了记录的数量,变量Y2005和Y2006的平均值和中位数。 summarise_at函数允许我们通过名称选择多个变量。

summarise_at(mydata, vars(Y2005, Y2006), funs(n(), mean, median))


实例20:用自定义函数进行总结

我们也可以在汇总功能中使用自定义函数。 在这种情况下,我们计算记录数,缺失值的数量,变量Y2011和Y2012的平均数和中位数。 点(.)表示函数的第二个参数中指定的每个变量。

summarise_at(mydata, vars(Y2011, Y2012),funs(n(), missing = sum(is.na(.)), mean(., na.rm = TRUE), median(.,na.rm = TRUE)))


实例21:总结所有的数字变量

summarise_if函数允许您有条件地总结。

summarise_if(mydata, is.numeric, funs(n(),mean,median))

或者

numdata <- mydata[sapply(mydata,is.numeric)]
summarise_all(numdata, funs(n(),mean,median))


实例22:总结因子变量

我们正在检查分类(因子)变量中的级别/类别数量和缺失观察数量。

summarise_all(mydata["Index"], funs(nlevels(.), nmiss=sum(is.na(.))))


实例23:按多个变量排序数据

arrange()函数的默认排序顺序是递增的。 在这个例子中,我们通过多个变量来排序数据。

arrange(mydata, Index, Y2011)

假设你需要按降序对其中一个变量进行排序,而对其他变量则按升序排序。

arrange(mydata, desc(Index), Y2011)


实例24:按分类变量汇总数据

我们通过变量Index计算变量Y2011和Y2012的变量的计数和均值。

t <- summarise_at(group_by(mydata, Index), vars(Y2011, Y2012), funs(n(), mean(., na.rm = TRUE)))

或者

t <- mydata %>% group_by(Index) %>%
summarise_at(vars(Y2011:Y2015), funs(n(), mean(., na.rm = TRUE)))


实例25:过滤分类变量中的数据

假设您需要从“A”,“C”和“I”类别的变量索引中抽取前两行。

mydata %>% filter(Index %in% c("A", "C","I")) %>% group_by(Index) %>%do(head( . , 2))


实例26:通过分类变量选择第三最大值

我们正在通过变量Index计算变量Y2015的第三个最大值。 以下代码首先仅选择两个变量Index和Y2015。 然后它用’A’,’C’和’I’过滤变量索引,然后对变量进行分组,然后按降序对变量Y2015进行排序。 最后,它选择第三行。

t <- mydata %>% select(Index, Y2015) %>%filter(Index %in% c("A", "C","I")) %>%group_by(Index) %>%do(arrange(.,desc(Y2015))) %>%  slice(3)

像SQL一样,dplyr使用窗口函数来将数据分组。 它返回值的向量。 我们可以使用min_rank()函数来计算上例中的rank,

t <- mydata %>% select(Index, Y2015) %>%filter(Index %in% c("A", "C","I")) %>%group_by(Index) %>%filter(min_rank(desc(Y2015)) == 3)


实例27:总结,分组和排序

在这种情况下,我们通过变量Index来计算变量Y2014和Y2015的均值。 然后通过计算的变量Y2015的均值对结果进行排序。

t <- mydata %>%group_by(Index)%>%summarise(Mean_2014 = mean(Y2014, na.rm=TRUE),Mean_2015 = mean(Y2015, na.rm=TRUE)) %>%arrange(desc(Mean_2015))


实例28:创建一个新变量

以下代码用变量Y2015除以Y2014的的值其命名为“change”。

mydata15 <- mutate(mydata, change=Y2015/Y2014)


实例29:将所有变量乘以1000

它创建新的变量并用后缀“_new”命名。

mydata11 <- mutate_all(mydata, funs("new" = .* 1000))


实例30:计算变量的排名

假设您需要计算变量Y2008至Y2010的排名。添加排名到列尾。

mydata17 <- mutate_at(mydata, vars(Y2008:Y2010), funs(Rank=min_rank(.)))

您在阅读中,有什么见解,请评论。

链接:https://www.listendata.com/2016/08/dplyr-tutorial.html
版权声明:作者保留权利,严禁修改,转载请注明原文链接。

猜你喜欢

10000+:菌群分析 宝宝与猫狗 梅毒狂想曲 提DNA发Nature Cell专刊 肠道指挥大脑

系列教程:微生物组入门 Biostar 微生物组  宏基因组

专业技能:学术图表 高分文章 生信宝典 不可或缺的人

一文读懂:宏基因组 寄生虫益处 进化树

必备技能:提问 搜索  Endnote

文献阅读 热心肠 SemanticScholar Geenmedical

扩增子分析:图表解读 分析流程 统计绘图

16S功能预测   PICRUSt  FAPROTAX  Bugbase Tax4Fun

在线工具:16S预测培养基 生信绘图

科研经验:云笔记  云协作 公众号

编程模板: Shell  R Perl

生物科普:  肠道细菌 人体上的生命 生命大跃进  细胞暗战 人体奥秘

写在后面

为鼓励读者交流、快速解决科研困难,我们建立了“宏基因组”专业讨论群,目前己有国内外1800+ 一线科研人员加入。参与讨论,获得专业解答,欢迎分享此文至朋友圈,并扫码加主编好友带你入群,务必备注“姓名-单位-研究方向-职称/年级”。技术问题寻求帮助,首先阅读《如何优雅的提问》学习解决问题思路,仍末解决群内讨论,问题不私聊,帮助同行。

学习16S扩增子、宏基因组科研思路和分析实战,关注“宏基因组”

使用dplyr进行数据操作(30个实例)相关推荐

  1. R︱高效数据操作——data.table包(实战心得、dplyr对比、key灵活用法、数据合并)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 由于业务中接触的数据量很大,于是不得不转战开始 ...

  2. 30号晚直播丨数据操作加速器,CloudQuery v1.3.5 发布!

    数据操作加速器,CloudQuery v1.3.5 发布!-03.30 CloudQuery 2021年第一场直播强势来袭!3月30日,CloudQuery将发布 v1.3.5,我们将在直播中为大家逐 ...

  3. python操作hive数据库代码_python导出hive数据表的schema实例代码

    本文研究的主要问题是python语言导出hive数据表的schema,分享了实现代码,具体如下. 为了避免运营提出无穷无尽的查询需求,我们决定将有查询价值的数据从mysql导入hive中,让他们使用H ...

  4. R语言空间数据处理(part1)--基础数据操作与处理

    学习笔记,仅供参考 学习书目:<R语言空间数据处理与分析实践教程>–卢宾宾; 基础数据操作与处理 设置工作路径,并导入包 workL = "F:/MyStudio/Rstudio ...

  5. SpringCloud或SpringBoot+Mybatis-Plus利用mybatis插件实现数据操作记录及更新对比

    引文 本文主要介绍如何使用mybatis插件实现拦截数据库操作并根据不同需求进行数据对比分析,主要适用于系统中需要对数据操作进行记录.在更新数据时准确记录更新字段 核心:mybatis插件(拦截器). ...

  6. influxDB框架 数据存储 TSM 数据操作等详解

    文章目录 influxdb influxdata主目录结构 源码主目录结构 cmd目录 其他目录 数据操作 CLI--influx命令行操作 执行influx 创建数据库 查看数据库 使用数据库 数据 ...

  7. Django模型基础(三)——关系表的数据操作

    模型之间可以有三种表关系,即一对一,一对多和多对多.表关联之间的数据操作在Django中可以很方便的操作到.在模型中,表关联的字段类型是关联表的实例,而不是字段本身类型.关联字段在数据库中会在其后补上 ...

  8. SQL不同服务器数据库之间的数据操作整理(完整版)

    --1. 创建链接服务器 --1.1 创建一个链接名 EXEC sp_addlinkedserver 'LinkName','','SQLOLEDB','远程服务器名或ip地址' --有自定义实例名还 ...

  9. SQL不同服务器数据库之间的数据操作整理(完整版)(转)

    -- Blog   : http://blog.csdn.net/htl258(转载保留此信息) -- Subject: SQL不同服务器数据库之间数据操作整理 ------------------- ...

最新文章

  1. php composer 无法下载,php – composer无法安装laravel / passport
  2. 数据结构Java实现05----栈:顺序栈和链式堆栈
  3. c语言中如何自定义sort,c – 如何重载自定义std :: sort比较函数?
  4. log4net使用具体解释
  5. 文献记录(part13)--Hypergraph based geometric biclustering algorithm
  6. Teams Bot开发系列:Activity处理流程
  7. 详解Java多线程编程中LockSupport类的线程阻塞用法
  8. ubuntu 系统U盘中 文件出现小锁子
  9. django 部署_狂野的Django:部署生存的技巧
  10. 关联规则应用场景实例十则
  11. linux 串口 字符 间隔,嵌入式linux编程过成中模块从串口读数需要特定的字符段并且需要每两位字符数组元素转换成一个16进制数(提取特定字符串+字符串转16进制)...
  12. curl模拟http发送get或post接口测试
  13. JVM性能调优监控工具详解
  14. 让你的网页更精彩 - Javascript 调用MSAgent (转)
  15. matlab 匹配滤波器,应用于雷达系统匹配滤波器的matlab仿真详解.doc
  16. vue 移动端使用日期插件datepicker.js
  17. HTML5网页设计——新闻页面制作
  18. java打印菱形图案_如何使用java打印出菱形图案
  19. office 复合文档数据结构解析“初探”
  20. 2015年9月 javaweb餐厅系统

热门文章

  1. 关于中台,你可能不知道的那些事
  2. 我挖掘Kafka底层原理!发现了它火爆宇宙的3个真相!
  3. 学了那么多年设计模式依然不会用!那可真蠢!
  4. 大型网站压力测试及优化方案
  5. vue实现动态css,Vue中如何动态绑定CSS
  6. 为什么做小程序的时候要做定制开发小程序?
  7. 搞垮服务的20条原则
  8. 网络负载均衡相关技术-七层负载
  9. java正则表达式 1,Java正则表达式学习(1)
  10. java socket modbus_Java modbus tcp 编程有懂得吗?给个示例看看。。。十分感谢。