R语言dplyr包的使用

  • 一、常用函数功能速查
  • 二、常用函数详解
      • iris数据集
    • 1. 取子集
      • filter/distinct
      • slice
      • select
    • 2. 窗口函数
    • 3. 连接合并
      • left_join/right_join/inner_join/full_join
      • bind_rows/bind_cols
    • 4. 生成新变量
      • mutate/transmute
    • 5. 统计
      • summarise
    • 6. 整合
      • arrange/group_by
      • rename
    • 7.语法
      • tbl_df/glimpse
      • %>%pipe

dplyr包是R语言一个用于高级数据处理的包,它对于每个基本需求都提供了一个函数,如取子集、连接、合并排序分组等等,很多函数与SQL的功能可以一一对应,对于复杂的数据集来说,dplyr包提供的函数更高效简洁。本文参考RSTUDIO以及R语言官方文档整理。

一、常用函数功能速查

dplyr对于数据处理的每个基本需求都提供了一个函数

类别 函数名 用途
1.取子集 filter() 根据条件选择行
distinct() 删除重复项
select() 根据条件选择列
slice() 切片
sample_n() 对数据按个数取随机样本
sample_frac() 对数据按比例取随机样本
2.窗口函数 dense_rank() 得到排序值
row_nunmber() 得到排序值
percent_rank() 0到1之间的数字,通过重新缩放min_rank为(0,1)之间
min_rank 排序值
cume_dist() 累积分布函数。所有小于或等于当前等级的值的比例
3.连接合并 left_join() 左连接
right_join() 右连接
inner_join() 内连接
full_join() 全连接
bind_rows() 按行连接
bind_cols() 按列连接
4.生成新变量 mutate() 在数据中生成新变量
transmute() 在数据中生成新变量
5.统计 summarise() 对变量计算统计量
summarise_each() 按列计算统计量
6.整合 arrange() 对行排序
group_by() 对数据分组
rename() 重新命名
7.语法 tbl_df() tibble型数据
glimpse() 描述数据结构
%>% pipe管道函数,将左边的对象作为第一个参数传递到右边的函数中

二、常用函数详解

iris鸢尾花数据集是R语言自带的数据集,150条数据,5个变量,简单好用,接下来用这个数据集举例说明函数的用法。

iris数据集

变量名 含义
Sepal.Length 花萼长度
Sepal.Width 花萼宽度
Petal.Length 花瓣长度
Petal.Width 花瓣宽度
Species 种类,共三种

1. 取子集

filter/distinct

#选取符合条件的行
filter(iris,Species=='setosa')
#满足两个条件其中之一
filter(iris,Species=='setosa'|Sepal.Width<3)
#两个条件同时满足
filter(iris,Species=='setosa'&Sepal.Width<3)
filter(iris,Species=='setosa',Sepal.Width<3)
#删除重复行
distinct(iris)

slice

#切片函数,选取第5-8行
slice(iris,5:8)
#和tail(iris, 1)一样,选择最后一个
slice(iris, 1L)
slice(iris, n())

select

#选择函数,选择Sepal.Width列
select(iris,Sepal.Width)
#选择函数,除了Sepal.Width以外的列
select(iris,-Sepal.Width)
#选择Sepal.Width和Species这两列以及之间的列
select(iris,Sepal.Width:Species)
#选择列名以Se开始的列
select(iris,starts_with('Se'))
#选择列名符合某个规则的列,如以th结尾的列名,规则参照正则表达式
select(iris,matches("th$"))
#选择所有列
select(iris,everything())
#选择包含S的列名
select(iris,contains('S'))

2. 窗口函数

一个例子说明,dplyr中的窗口函数与sql用法一致。不同的排序函数只是处理并列情况的方式不一样

x <-c(10,20,30,40,40,50,60)
data.frame(x,row_number(x),
min_rank(x),
dense_rank(x),
cume_dist(x))

注意原始数据虽然大致按顺序从小到大排列,但是存在两个并列的40,下面是排序结果

原始数据x row_number min_rank dense_rank cume_dist
10 1 1 1 0.1428571
20 2 2 2 0.2857143
30 3 3 3 0.4285714
40 4 4 4 0.7142857
40 5 4 4 0.7142857
50 6 6 5 0.8571429
60 7 7 6 1.0000000
  • row_number函数:不考虑并列情况,直接按顺序排名
  • min_rank函数:如果有并列名次的行,会占用下一名次的位置。
  • dense_rank函数:如果有并列名次的行,不占用下一名次的位置。

3. 连接合并

left_join/right_join/inner_join/full_join

join类函数和sql的用法一致,用于两个数据集的连接,用一张图来说明连接的作用。假设有a、b两个数据集,如图所示。则不同的join将给出不同的效果

function 作用
left_join() 左连接,按照左表的关键字匹配,遇到右表没有对应的行时,自动填充NA,即向表a加入匹配的数据集b的记录
right_join() 右连接,按照右表的关键字匹配,向表b加入匹配的数据集a的记录
inner_join() 内连接,两个表都匹配的记录
full_join() 全连接,合并数据,保留所有记录

bind_rows/bind_cols

#类似rbind函数,按行合并
bind_rows(iris,iris)
iris数据150行5列,这个函数会生成300行5列的数据#类似cbind函数,按列合并
bind_cols(iris,iris)
生成150行10列的数据

4. 生成新变量

mutate/transmute

#生成新变量V1,但不会改变原数据集,也不会保存
mutate(iris,V1=Sepal.Length/Sepal.Width)
#可以将其保存在newdata里面
newdata<-(iris,V1=Sepal.Length/Sepal.Width)
#对每列运行函数funs生成一个新变量,保留原变量的名字,生成全新数据
mutate_each(iris,funs = min_rank)#只保留新变量V1
transmute(iris,V1=Sepal.Length/Sepal.Width)

5. 统计

summarise

#概述函数
summarise(iris,avg=mean(Sepal.Width))>avg
<dbl>
3.057333    #对每列运用某个函数
summarise_each(iris,funs = mean)>Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.843333    3.057333    3.758   1.199333    NA

我们可以看到经常需要用到参数funs,常用的统计函数如下

function 作用
first/last 第一个、最后一个
nth 第n个
mean/max/mean/medain 平均、最大最小、中位数
var/sd/IQR 方差、标准差、四分位数间距
n 元素个数
n_distinct 不同元素个数

6. 整合

arrange/group_by

#对数据按照Species进行整合
arrange(iris,Species)
#对数据按照Sepal.Width降序进行排序
arrange(iris,desc(Sepal.Width))#对数据进行分组,效果一样
group_by(iris,Speicies)

group_by函数,一般和其他函数一起使用,如分组生成新变量,分组统计等等

rename

#select也可以改名,但只保留重命名的那一列
select(iris, petal_length = Petal.Length)>petal_length
1.4
1.4
1.3
1.5 #rename保留所有变量,只是改了列名
rename(iris, petal_length = Petal.Length)>Sepal.Width petal_length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa#select可以将一组的变量一起重新命名
select(iris, obs = starts_with('S'))>obs1 obs2 obs3
5.1 3.5 setosa
4.9 3.0 setosa
4.7 3.2 setosa
4.6 3.1 setosa      

7.语法

tbl_df/glimpse

#tibble数据集和数据框类似
tbl_df(iris)>Sepal.Length<dbl> Sepal.Width<dbl>Petal.Length<dbl> Petal.Width<dbl> Species<fctr>
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa#glimpse与str作用一样
glimpse(iris)>Rows: 150
Columns: 5
$ Sepal.Length <dbl> 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9, 5.4, 4.8, 4....
$ Sepal.Width  <dbl> 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4, 3.4, 2.9, 3.1, 3.7, 3.4, 3....
$ Petal.Length <dbl> 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4, 1.5, 1.4, 1.5, 1.5, 1.6, 1....
$ Petal.Width  <dbl> 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0....
$ Species      <fct> setosa, setosa, setosa, setosa, setosa, setosa, setosa, setosa...

%>%pipe

  • 管道函数,将左边的对象作为第一个参数传递到右边的函数中
  • x%>%f(y) 等于 f(x,y)
  • y%>%f(x,z) 等于f(x,y,z)
  • 管道操作可以节省空间,让逻辑更清楚
#eg1
#以下两个表达式等价
sum(1,2)%>%sum(3)
sum(1,2,3)#eg2
#取前五行
iris%>%head(5)
# Lambda expressions 随机取前几行,用大括号加入更长的语句,利用.传递数据
iris %>%
{size <- sample(1:10, size = 1)head(., size)
}#eg3
#group_by经常和管道函数一起运用
#假设我们需要先按种类分组,再选取其中的两列,再按照条件选行
table1<-group_by(iris,Species)
table2<-select(table1,Petal.Width,Sepal.Width)
table3<-filter(table1,Sepal.Width>3)
#利用管道函数可以让选择的过程更清晰,无需建多个新表
iris%>%group_by(Species)%>%select(Petal.Width,Sepal.Width)%>%filter(Sepal.Width>3)

R语言dplyr包超完整版函数指南相关推荐

  1. R语言dplyr包排序及序号函数实战(row_number、ntile、min_rank、dense_rank、percent_rank、cume_dist)

    R语言dplyr包排序及序号函数实战(row_number.ntile.min_rank.dense_rank.percent_rank.cume_dist) 目录 R语言dplyr包排序及序号函数实 ...

  2. R语言dplyr包:高效数据处理函数(filter、group_by、mutate、summarise)

    R语言dplyr包的数据处理.分析函数 在日常数据处理过程中难免会遇到些难处理的,选取更适合的函数分割.筛选.合并等实在是大快人心! 利用dplyr包中的函数更高效的数据清洗.数据分析,及为后续数据建 ...

  3. R语言dplyr包:高效数据处理函数arrange、sample_n、n_distinct、select、compute等

    今天是个特别的日子,小编在这里祝大家情人节快乐!本篇文章继续之前文章提到的关于dplyr包数据处理的函数.错了,小编是准备那天发的,忘发了 R语言在数据整理.分析上面的方法是很多的,并且通俗易懂,相信 ...

  4. R语言dplyr包中的filter函数

    R语言日常笔记(1)filter函数 经常忽略的两个用法 1.单列多因素 挑选city列为武汉市和month列为1:5或9:12(观测值) > ms_wh <- filter(ms_dat ...

  5. R语言dplyr包使用bind_rows函数纵向合并两个dataframe(行生长)、使用bind_cols函数横向合并两个dataframe(列生长)

    R语言dplyr包使用bind_rows函数纵向合并两个dataframe(行生长).使用bind_cols函数横向合并两个dataframe(列生长) 目录

  6. R语言dplyr包的top_n函数返回dataframe或tibble的前N行数据、dplyr包的top_frac函数返回dataframe或tibble的前百分之N(N%)的数据

    R语言dplyr包的top_n函数返回dataframe或tibble的前N行数据.dplyr包的top_frac函数返回dataframe或tibble的前百分之N(N%)的数据 目录

  7. R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:基于条件判断创建布尔型指示变量、将异常离散编码转化为NA值

    R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:基于条件判断创建布尔型指示变量.将异常离散编码转化为NA值 目录

  8. R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:使用na_if()函数将0值替换为NA值、负收入替换为NA值

    R语言dplyr包的mutate函数将列添加到dataframe中或者修改现有的数据列:使用na_if()函数将0值替换为NA值.负收入替换为NA值 目录

  9. R语言dplyr包为dataframe添加数据列实战( Add Columns):基于mutate()函数添加一个或者多个数据列(尾部添加、头部添加、条件生成、某个具体数据列的前后)

    R语言dplyr包为dataframe添加数据列实战( Add Columns):基于mutate()函数添加一个或者多个数据列(尾部添加.头部添加.条件生成.某个具体数据列的前后) 目录

最新文章

  1. 【Groovy】自定义 Xml 生成器 BuilderSupport ( 继承 BuilderSupport 抽象类 | 在 createNode 方法中获取节点名称、节点属性、节点值信息 )
  2. 全志h3linux移植教程,全志H3启动分析,移植主线UBOOT
  3. 全球及中国生物质能利用产业十四五发展目标及前景容量预测报告2021-2027年
  4. vmware下linux虚拟机传文件解决方案之 xftp
  5. 80386/386/Intel386 架构/流水线及其优化
  6. Thinapp的昨天,今天和明天
  7. 前端ui框架_推荐几个移动端前端UI框架
  8. 3个重点,20个函数分析,浅析FFmpeg转码过程
  9. java swing实现抖音上的表白程序
  10. 关于惠普打印机可以打印但是无法扫描的问题
  11. 如何管理时间:重要紧急四象限的思考
  12. matlab正弦信号频谱,正弦信号的正弦信号的频谱分析及提取.doc
  13. 搜索百度网盘资源的方法
  14. 战舰帝国服务器维护,【图片】9月17日更新公告亲爱的司令官:《战舰帝国》于9月17日维护,成功更新后可以获得200个钻石的更新补偿_战舰帝国吧_百度贴吧...
  15. 搭建个人网盘-owncloud
  16. Day04 关键字、标识符、变量及运算符
  17. Mysql高性能优化
  18. 二叉树的基本运算实验报告C语言,实验三 二叉树基本操作与应用实验
  19. 1T文件夹 - 微云
  20. (三)51单片机基础——独立按键与数码管

热门文章

  1. 那些有趣的网站系列(八)
  2. python中取整数操作
  3. 等级保护中要求的双因子认证
  4. 关注职业发展,也要关注健康 别让老板杀了你
  5. java周末_如何在Java中的两个日期之间的除周末,周六或周日之外的每一天获取信息?...
  6. java后台实现生成二维码并且上传的详细介绍
  7. iphone 恒屏和自动旋转
  8. java集群和分布式 区别_集群与分布式的联系以及区别
  9. 安装 KeyShot 流程
  10. rabbitMQ原理+Laravel8简单示例