R语言包 dplyr之常用函数
一、安装
我的环境:win10 64位。R版本:4.0 dplyr版本 :1.0.5
或者使用packageVersion("dplyr")#查看你的R包版本
以下所有操作均基于 jupyter lab+R语言。
install.packages("dplyr")
(.packages()) #查看当前R运行环境有哪些包可用。
detach("package:dplyr") #将加载进R运行环境的包移除,不是删除包!
二、加载包
library("dplyr")
三、查看包中有哪些函数和函数的具体信息
help(package="dplyr") #查看包中有哪些函数
?select #查看包中的select函数的文档,或者使用help(函数名)
example(select) #有关select函数的例子
四、数据集
本文使用的是R自带的数据集,mtcars
如果你是使用R或者Rstudio,建议使用df<-tbl_df(mtcars),这样df看起来会比较简洁。
但是我是用的jupyter lab,所以我就直接使用df<-mtcras,改个名了。
数据集预览:
五、常用函数介绍
PS:df为dataframe数据框的简称,以下统称df
1.select 作用:选择df中列的函数。
?help或者help(select),即可查阅该函数的文档。
该函数的第一个参数为df,第二个参数如下。
现在来了解下该函数的操作符吧,呃嗯,英语跟我一样不行的建议看右边 :)
我就简单的介绍一下这四个操作符吧。
- ":" 该符号表示用于选择一系列的变量。
- "!":表示取反操作的,类似于在df中不选择某列,比如df[,-1],表示不选择第一列
- "&":表示逻辑运算符“与”,表示“且”的意思。A&B,表示满足条件A,且满足条件B
- "|":表示逻辑运算符“或”,表示“或”的意思。A|B,表示满足条件A或者满足条件B就可以了,通常具有短路操作。
- "c()":就是表示列的组合,其实就是向量,元素可为数字或者字符串。
之所以单独拉出来讲,是因为后面会用得非常频繁。
下面还有几个比较重要的函数,我简单介绍下,这些函数可以作为select选择列的参数来使用。
- last_col():表示选择最后一列。
- starts_with():表示以什么开头的列。
- ends_with():表示以什么结尾的列。
- contains():表示某列是否包含什么内容。
例子:
- 选择df中的第一列到第五列。
用法:select(df,1:5)或者select(df,c(1,2,3,4,5))
- 选择df中的mpg到wt之间的所有列,包括(mpg,wt)
用法:select(df,"mpg":"wt")
- 选择某些列以"d"开头,或者以"p"结尾的。
用法:select(df,starts_with("d")|ends_with("p"))
- 选择某些列以"d"开头,且以"t"结尾的。
用法:select(df,starts_with("d")&ends_with("t"))
- 选择以"d"开头,且包含"s"的列。
用法:select(df,starts_with("d")&contains("s"))
- 选择不以"d"开头,且以"p"结尾的列.
用法:select(df,!(starts_with("d"))&(ends_with("p")))
好了,我现在向大家来介绍一下这个包中引进的管道符:%>%
如果你使用过Linux系统,你对管道符应该会比较了解,现在来看下R中的吧。
用法:df%>%select(mpg,wt)->df1,运行一下,看看是不是选择了df中的,mpg,wt两列呢,并且我们将结果赋值给了变量df1
作用1:将df,传递到select函数中的第一个位置,事实上,我们还可以通过"."作为占位符,来将df放到任意位置。
比如df%>%select(mpg,wt,.),注意看,wt后面有一个点,当然这条语句是不能正常运行的,我只是想告诉大家,通过“点”作为占位符,可以将上一个结果,放到下一个管道中的任意位置。
作用2:有没有发现用了管道符之后,我们再次使用列名mpg的时候,便不需要使用df$mpg了呢,没错,它的另外一个功能就是类似于attach,数据绑定的功能,使用管道符,能让我们的代码更加简洁。
2.filter 作用:用来筛选行的函数。
该函数的第一个参数依然是df,第二个参数与上面的select的用法其实差不多。
首先来看下第二个参数的操作符吧,值介绍一个,其余的,大家应该都能看懂。
between(x,a,b):假设x是一个数值型向量,该函数判断x中元素是否(>=a)&(<=b),返回一个逻辑型向量。
- 选择df中,hp列大于等于110,小于等于150的行,且gear列等于4。
filter(df,between(df$hp,110,150)&(df["gear"]==4))
- 选择df中,hp列大于disp列的行。
filter(df,df["hp"]>df["disp"])
第二个参数,作为筛选满足条件的df的行,其实非常考验大家的基本功。它不像select函数筛选列那么简单,但是,只要弄明白了,第二个参数是用来筛选行的,再对照对照select函数,其实还是不难的。
3.arrange 作用:用来使df按照一列或者多列进行排序
1.使df按照mpg列升序排列,wt列,降序排列。
arrange(df,"mpg",desc("wt")) 默认是升序,如需降序,则使用desc()函数。
4.mutate 作用:产生新的列,保留旧的列。
下面我们一起搭配,管道符,以及select函数来操作一下。
df%>%select(cyl,gear,wt)%>%mutate(
cyl2=cyl*2,
gear4=gear*4,
wt=NULL #将值设置为NULL,可将这列删除
)%>%head()
结果如下:
首先,我们将df通过管道,送入select函数的第一个位置中,然后筛选出了cyl,gear,wt三列。
然后我们通过mutate函数,增加了cyl2,gear4两列,并且将wt列给删除掉了。
假如我们想指定这些新增加的列放在哪个列之前或者之后,我们使用 .before=原来df中的某个列名,我们可以将新增加列,放在原来的那个列名前面,注意before参数前面有个点!!,.after表示放在某个列之后。
5.summarise 作用:主要对数据框或者分组变量进行统计性描述。
还是先来看下文档的官方描述吧。
这个函数我主要讲解的是,它针对数据框的使用,至于它针对分组变量的使用,我将放在group_by函数中讲解。
下面我将继续介绍一下常用函数,这对于summarize非常有用。
下面我将介绍几个常用的函数;
- mean:均值函数。
- median():中位数函数。
- sd():标准差函数
- IQR():四分位间距,如果有兴趣,可以查看《概率论与数理统计》(浙大第四版)P132,需要的话,可以加我好友,我发你。
- mad():中位数绝对偏差,是不是有点难理解呢,没关系,控制台输入?mad,查看该函数文档,非常详细。
- quantile:四分位数函数,第一个参数为数值型向量,第二个参数可以自己定义要返回几分位数的值。
需要特别注意的是,该函数返回的是一个数值型向量,而不是像其他函数一样简单返回一个数值。
- nth():表示抽取向量中哪一个位置的元素,比如nth(c(1,5,2),2)抽取的是第二个位置的,返回5,还可以通过负号,来表示抽取倒数第几个,比如nth(c(1,5,2),-3),表示抽取倒数第三个,就是1
- n():返回当前分组或者变量的信息,通常是计数,通常用在特定函数,比如summarize,mutate中。
- n_distinct():去重后,再计数。
- first(),last():参数可以为一个向量,分别返回向量的第一个值,和最后一个值。
现在开始正式介绍,summarize函数对数据框的使用。
然后呢,就没有然后了,但是这仅仅是针对数据框的,下面开始准备介绍针对分组的。
6.group_by 作用:对数据框按照一列或者多列进行分组,通常与summarise组合使用。
如果你想再多了解一下,可以使用example(group_by)去看看这个函数的案例。
7.sample_n 作用:从给定的数据框中,采样n个数据。
下面的df同上面的df,为R内置数据集mtcars
replace表示是否放回抽样,默认为FALSE,不放回抽样,如果需要放回抽样,则需要设置为 replace=TRUE
sample_n(df,5,replace=FALSE) 采样df的5条数据
8.sample_frac 作用:从给定的数据框中,采样多少比例的数据。
replace表示是否放回抽样,默认为FALSE,不放回抽样,如果需要放回抽样,则需要设置为 replace=TRUE
sample_frac(df,0.5,replace=FALSE) 从df中,采样50%的数据。
9.case_when 作用:针对向量元素,对符合条件的,做操作。
当使用这个函数的时候,有几点,我希望你能特别注意以下几点:
1.当向量中的元素不符合条件时候,会被当做NA,你操作的向量元素个数,和case_when输出的向量元素个数相等。
2.每个条件的执行是有顺序的,顺序从上往下执行!
3.输出的向量的类型必须是统一的,要么为数值型向量,要么为字符型向量,是什么类型取决于最上面执行的条件判断。
4.当进行两个向量间的条件判断的时候,两个向量的元素个数必须相等
好了,估计说得有点绕,下面我用两个例子,你应该就明白了。
格式为:case_when(
条件1~针对条件1进行的操作,
TRUE~某操作
)
其中,符号"~"可理解为赋值操作。TRUE 可理解为else,注意else的范围是最大的,如果放在第一行,并且进行的是赋值操作,那么就会返回你赋的值,如果是针对向量元素的操作,那么返回的还是一个向量。见下图。
当针对单个向量的时候:
当针对多个向量的时候:
总结一下:类型,顺序非常重要,你稍不注意类型,便会报错。
10.if_else 作用:对向量进行条件筛选,然后操作。
这个函数更像是case_when的迷你版
if_else(条件,满足条件的元素的操作,不满足条件的元素的操作)
看一下文档的案例,你就会了
11.集合操作
以下集合操作均可针对向量进行操作。
a<-1:5
b<-3:8
12.distinct 作用:对数据框进行去重。
格式:distinct(df,变量名1,变量名2,.keep_all=FALSE) 参数介绍见图。
13.数据框连接操作:inner_join, left_join, right_join, full_join,等
这篇文章写得还不错,可以作为参考。
https://www.jianshu.com/p/1f4c7bfed3d4
对于文章有疑问的话,可以添加好友与我交流。
以上基本就是dplyr包的中常用函数了,觉得不错的话,不妨点赞收藏哦:)