相信我,这是全网最详细的dplyr教程

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,改个名了。

数据集预览:

image

五、常用函数介绍

PS:df为dataframe数据框的简称,以下统称df

1.select 作用:选择df中列的函数。

?help或者help(select),即可查阅该函数的文档。

该函数的第一个参数为df,第二个参数如下。

现在来了解下该函数的操作符吧,呃嗯,英语跟我一样不行的建议看右边 :)

我就简单的介绍一下这四个操作符吧。

  1. ":" 该符号表示用于选择一系列的变量。
  1. "!":表示取反操作的,类似于在df中不选择某列,比如df[,-1],表示不选择第一列
  1. "&":表示逻辑运算符“与”,表示“且”的意思。A&B,表示满足条件A,且满足条件B
  1. "|":表示逻辑运算符“或”,表示“或”的意思。A|B,表示满足条件A或者满足条件B就可以了,通常具有短路操作。
  1. "c()":就是表示列的组合,其实就是向量,元素可为数字或者字符串。
之所以单独拉出来讲,是因为后面会用得非常频繁。
image

下面还有几个比较重要的函数,我简单介绍下,这些函数可以作为select选择列的参数来使用。

  • last_col():表示选择最后一列。
  • starts_with():表示以什么开头的列。
  • ends_with():表示以什么结尾的列。
  • contains():表示某列是否包含什么内容。

例子:

  1. 选择df中的第一列到第五列。
用法:select(df,1:5)或者select(df,c(1,2,3,4,5))
  1. 选择df中的mpg到wt之间的所有列,包括(mpg,wt)
用法:select(df,"mpg":"wt")
  1. 选择某些列以"d"开头,或者以"p"结尾的。
用法:select(df,starts_with("d")|ends_with("p"))
  1. 选择某些列以"d"开头,且以"t"结尾的。
用法:select(df,starts_with("d")&ends_with("t"))
  1. 选择以"d"开头,且包含"s"的列。
用法:select(df,starts_with("d")&contains("s"))
  1. 选择不以"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的用法其实差不多。

首先来看下第二个参数的操作符吧,值介绍一个,其余的,大家应该都能看懂。

image
  1. between(x,a,b):假设x是一个数值型向量,该函数判断x中元素是否(>=a)&(<=b),返回一个逻辑型向量。

    image
  1. 选择df中,hp列大于等于110,小于等于150的行,且gear列等于4。
filter(df,between(df$hp,110,150)&(df["gear"]==4))
  1. 选择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()

结果如下:

image

首先,我们将df通过管道,送入select函数的第一个位置中,然后筛选出了cyl,gear,wt三列。

然后我们通过mutate函数,增加了cyl2,gear4两列,并且将wt列给删除掉了。

假如我们想指定这些新增加的列放在哪个列之前或者之后,我们使用 .before=原来df中的某个列名,我们可以将新增加列,放在原来的那个列名前面,注意before参数前面有个点!!,.after表示放在某个列之后。

5.summarise 作用:主要对数据框或者分组变量进行统计性描述。

还是先来看下文档的官方描述吧。

image

这个函数我主要讲解的是,它针对数据框的使用,至于它针对分组变量的使用,我将放在group_by函数中讲解。

下面我将继续介绍一下常用函数,这对于summarize非常有用。

image

下面我将介绍几个常用的函数;

  1. mean:均值函数。
  2. median():中位数函数。
  3. sd():标准差函数
  4. IQR():四分位间距,如果有兴趣,可以查看《概率论与数理统计》(浙大第四版)P132,需要的话,可以加我好友,我发你。
  5. mad():中位数绝对偏差,是不是有点难理解呢,没关系,控制台输入?mad,查看该函数文档,非常详细。
image
image
  1. quantile:四分位数函数,第一个参数为数值型向量,第二个参数可以自己定义要返回几分位数的值。

需要特别注意的是,该函数返回的是一个数值型向量,而不是像其他函数一样简单返回一个数值。

image
  1. nth():表示抽取向量中哪一个位置的元素,比如nth(c(1,5,2),2)抽取的是第二个位置的,返回5,还可以通过负号,来表示抽取倒数第几个,比如nth(c(1,5,2),-3),表示抽取倒数第三个,就是1
  2. n():返回当前分组或者变量的信息,通常是计数,通常用在特定函数,比如summarize,mutate中。
  3. n_distinct():去重后,再计数。
  4. first(),last():参数可以为一个向量,分别返回向量的第一个值,和最后一个值。

现在开始正式介绍,summarize函数对数据框的使用。

image

然后呢,就没有然后了,但是这仅仅是针对数据框的,下面开始准备介绍针对分组的。

6.group_by 作用:对数据框按照一列或者多列进行分组,通常与summarise组合使用。

image
image
image
image

如果你想再多了解一下,可以使用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的范围是最大的,如果放在第一行,并且进行的是赋值操作,那么就会返回你赋的值,如果是针对向量元素的操作,那么返回的还是一个向量。见下图。

image

当针对单个向量的时候:

image

当针对多个向量的时候:

image
image

总结一下:类型,顺序非常重要,你稍不注意类型,便会报错。

10.if_else 作用:对向量进行条件筛选,然后操作。

这个函数更像是case_when的迷你版

if_else(条件,满足条件的元素的操作,不满足条件的元素的操作)

看一下文档的案例,你就会了

image

11.集合操作

以下集合操作均可针对向量进行操作。

a<-1:5

b<-3:8

image

12.distinct 作用:对数据框进行去重。

格式:distinct(df,变量名1,变量名2,.keep_all=FALSE) 参数介绍见图。

image

13.数据框连接操作:inner_join, left_join, right_join, full_join,等

这篇文章写得还不错,可以作为参考。

https://www.jianshu.com/p/1f4c7bfed3d4

对于文章有疑问的话,可以添加好友与我交流。

以上基本就是dplyr包的中常用函数了,觉得不错的话,不妨点赞收藏哦:)

你可能感兴趣的:(相信我,这是全网最详细的dplyr教程)