数据处理|R-dplyr

简介: 数据处理|R-dplyr

本文首发于“生信补给站”公众号 数据处理|R-dplyr

dplyr包实现数据的清洗处理,包括数据整合、关联、排序、筛选、汇总、分组等。


1)安装、加载dplyr包、准备数据

 

install.packages("dplyr") #加载dplyr包
library(dplyr)  #载入dplyr包

使用dplyr包处理数据前,建议先将数据集转换为tbl对象

data(iris)  #本文使用iris示例数据集。
class(iris)  #简单查看数据集
head(iris)
iris<-tbl_df(iris)    #转化tbl对象


2)数据记录筛选(行筛选)

filter函数:按指定条件筛选符合条件中逻辑判断要求的数据记录。

filter(iris, Sepal.Length == 7)

Q:筛选花萼长大于7,花萼宽带大于等于3的数据?

filter(iris, Sepal.Length > 7 & Sepal.Width>3.0)

Q:筛选出Species 为setosa或virginica的行

filter(iris,Species %in% c("setosa","virginica"))

3)变量筛选(列)

select函数:可以通过指定列名选择指定的变量进行分析,得到的为选择的列。

select(iris,Sepal.Width,Petal.Length,Species)

其他特殊选择,可匹配:

select(iris,contains("." )) #选取名称中含有字符的列
select(iris,ends_with("Length")) #选取名称以指定字符串结尾的列
select(iris,starts_with("Sepal")) #选取名称以指定字符串为开头的列
select(iris,Sepal.Length:Petal.Width) #选取在Sepal.Length和Petal.Width之间的所有列(包含Sepal.Length和Petal.Width)
select(iris,-Species) #选取除Species以外的所有列
Select(iris,……)

区别:Filter&Select

Filter:通过一些准则选择观测值(行)

Select:通过名字来选择变量(列)

更名变量名: Select  &  Rename

head(select(iris,Sepal.W=Sepal.Width)) #只会保留选择的变量
head(rename(iris,Sepal.W=Sepal.Width)) #保留所有变量,可以用来改名

4)数据排序(重要,大小,去除异常值)

arrange函数按给定的列名进行排序,默认为升序排列,也可以对列名加desc()进行降序排序。

arrange(iris,Sepal.Length) # 将数据按照Sepal.Length升序排序
Q:将数据Sepal.Length先升序,后Sepal.Width降序排序:
arrange(iris,Sepal.Length,desc(Sepal.Width))

5)变量变换/重构

mulate()函数可以数据拓展,也可以在保留原变量的基础上增加变量,进行数据处理。

mutate(iris,sepal = Sepal.Length + Sepal.Width)
transmute()函数在扩展新变量的时候,会删除所有原始变量。
transmute(iris,sepal = Sepal.Length + Sepal. Width) #计算一个或多个新列并删除原列

6)数据汇总

summarize()函数实现数据集聚合操作,将多个值汇总成一个值

summarise(iris,avg = mean(Sepal.Length))

利用概述函数概括数据,输入数值向量而返回单一数值:

first 向量的第一个值。

last 向量的最后一个值。

IQR 向量的IQR(四分位距) 。

Min ;Max Mean ;Median ;Var ;Sd等

summarise(iris, max(Petal.Width), first(Sepal.Width)) #返回数据框中变量的最大值及第一四分位值

7)数据分组

group_by函数对数据进行分组后,结合summarize函数,可以对分组数据进行汇总统计。

Q:按品种分组,分别计算花萼宽度的均方差

summarise(group_by(iris,Species),sd=sd(Petal.Width))

8)连接操作符

dplyr包里还新引进了一个操作符,%>%, 使用时把数据集名作为开头, 然后依次对此数据进行多步操作。

iris %>%group_by(Species) %>% summarise(sd=sd(Petal.Width)) #iris数据集,按Species分组,汇总Petal.Width的sd值,
iris %>%group_by(Species) %>% mutate(sepal = Sepal.Length + Sepal.Width)

9)抽样

sample_n()随机抽取指定数目的样本,sample_frac()随机抽取指定百分比的样本,默认都为不放回抽样,通过设置replacement =TRUE可改为放回抽样,可以用于实现Bootstrap抽样。

sample_n(mtcars, 50, replace = TRUE) #随机有重复的取50行数
sample_frac(mtcars, 0.1, weight = 1 / mpg) #随机无重复的以1/mpg值做权重取10%的数据

10)数据联结

dplyr包也提供了数据集的连接操作,如左连接、右连接、内连接等:

 inner_join(x,y,by = NULL)  #内连接,合并数据仅保留匹配的记录
 left_join(x,y,by = NULL)  #左连接,向数据集x中加入匹配的数据集y记
 right_join(x,y,by = NULL)   #右连接,向数据集y中加入匹配的数据集x记录
 full_join(x,y,by = NULL) #全连接,合并数据保留所有记录,所有行
 semi_join(x,y,by = NULL) #返回能够与y表匹配的x表所有记录
 anti_join(x,y, by = NULL)  #返回无法与y表匹配的x表的所有记录

by设置两个数据集用于匹配的字段名,默认使用全部同名字段进行匹配,如果两个数据集需要匹配的字段名不同,可以直接用等号指定匹配的字段名,如, by = c("a" = "b"),表示用x.a和y.b进行匹配。

11)数据合并

dplyr包中也添加了类似cbind()函数和rbind()函数功能的函数,它们是bind_cols()函数和bind_rows()函数。

注意:bind_rows()函数需要两个合并对象有相同的列数,而bind_cols()函数则需要两个合并对象有相同的行数。


查看自带的参考资料:vignette(package = "dplyr") vignette("introduction", package = "dplyr")

相关文章
|
存储 Kubernetes 容器
Kubernetes 存储选项:持久化卷与存储类
【8月更文第29天】随着容器化的普及,越来越多的应用程序需要持久化数据以保持状态信息。Kubernetes 提供了一套完整的解决方案来管理和配置持久化存储,包括持久卷 (Persistent Volume, PV)、持久卷声明 (Persistent Volume Claim, PVC) 和存储类 (StorageClass)。本文将详细介绍这些概念,并通过实际示例来演示如何在 Kubernetes 中配置存储。
950 3
|
10月前
|
弹性计算 API 开发者
DeepSeek R1上线阿里云云市场,可通过计算巢一键部署
DeepSeek R1上线阿里云云市场,可通过计算巢一键部署
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
208 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
数据安全/隐私保护
自定义密码访问跳转页面HTML源码
自定义密码访问跳转页面HTML源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面
245 0
自定义密码访问跳转页面HTML源码
|
存储 运维 搜索推荐
重构支付宝商家账单问题之重构支付宝商家账单的目标是什么,如何实现
重构支付宝商家账单问题之重构支付宝商家账单的目标是什么,如何实现
174 1
|
数据库
实时数仓 Hologres产品使用合集之如何减少查询启动的耗时
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
存储 运维 Kubernetes
基于rancher部署k8s及使用
基于rancher部署k8s及使用
880 2
|
前端开发
CSS小技巧之绘制心形图案
CSS小技巧之绘制心形图案
247 0
|
SQL 测试技术 数据库
【软考备战·希赛网每日一练】2023年5月8日
单元测试 用来 检查模块是否正确实现了规定功能。 确认测试:始于集成测试的结束,那时已测试完单个构件,软件已组装成完整的软件包,且接口错误已被发现和改正。
291 0