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

R语言包 dplyr之常用函数

欢迎关注公众号:统计与数据挖掘

一、安装

我的环境:win10 64位。R版本:4.0

以下所有操作均基于 jupyter lab+R语言。

install.packages(“dplyr”)

二、加载包

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-20210317165241260

五、常用函数介绍

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

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

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

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

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

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

  1. “:” 该符号表示用于选择一系列的变量。

  2. “!”:表示取反操作的,类似于在df中不选择某列,比如df[,-1],表示不选择第一列

  3. “&”:表示逻辑运算符“与”,表示“且”的意思。A&B,表示满足条件A,且满足条件B

  4. “|”:表示逻辑运算符“或”,表示“或”的意思。A|B,表示满足条件A或者满足条件B就可以了,通常具有短路操作。

  5. “c()”:就是表示列的组合,其实就是向量,元素可为数字或者字符串。

    之所以单独拉出来讲,是因为后面会用得非常频繁。

image-20210317180517224

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

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

例子:

  1. 选择df中的第一列到第五列。

    用法:select(df,1:5)或者select(df,c(1,2,3,4,5))

  2. 选择df中的mpg到wt之间的所有列,包括(mpg,wt)

    用法:select(df,“mpg”:“wt”)

  3. 选择某些列以"d"开头,或者以"p"结尾的。

    用法:select(df,starts_with(“d”)|ends_with(“p”))

  4. 选择某些列以"d"开头,且以"t"结尾的。

    用法:select(df,starts_with(“d”)&ends_with(“t”))

  5. 选择以"d"开头,且包含"s"的列。

    用法:select(df,starts_with(“d”)&contains(“s”))

  6. 选择不以"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-20210317185924376

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

  2. 选择df中,hp列大于等于110,小于等于150的行,且gear列等于4。

    filter(df,between(df$hp,110,150)&(df​[“gear”]==4))

  3. 选择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-20210317205458453

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

然后我们通过mutate函数,增加了cyl2,gear4两列,并且将wt列给删除掉了。
假如我们想指定这些新增加的列放在哪个列之前或者之后,我们使用 .before=原来df中的某个列名,我们可以将新增加列,放在原来的那个列名前面,注意before参数前面有个点!!,.after表示放在某个列之后。

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

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

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

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

image-20210318094249179

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

  1. mean:均值函数。
  2. median():中位数函数。
  3. sd():标准差函数
  4. IQR():四分位间距,如果有兴趣,可以查看《概率论与数理统计》(浙大第四版)P132
  5. mad():中位数绝对偏差,是不是有点难理解呢,没关系,控制台输入?mad,查看该函数文档,非常详细。

image-20210318120349320

image-20210318120503572

  1. quantile:四分位数函数,第一个参数为数值型向量,第二个参数可以自己定义要返回几分位数的值。

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

image-20210318100248125

  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-20210318102506192

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

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

image-20210318112041416

image-20210318112127185

image-20210318112346609

image-20210318112506478

如果你想再多了解一下,可以使用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-20210318145702941

单针对单个向量的时候:

image-20210318151548555

当针对多个向量的时候:

image-20210318161340761

image-20210318161422468

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

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

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

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

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

image-20210318162316019

11.集合操作

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

a<-1:5

b<-3:8

image-20210318170526191

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

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

image-20210318182604551

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

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

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

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

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

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
对于全网详细的VSCode教程,以下是一个简短的描述: 全网详细的VSCode教程应该含以下内容:基本介绍、安装和设置、编辑器布局、常用快捷键、实用插件和扩展、调试功能、版本控制、代码片段等。 在基本介绍部分,应该详细介绍VSCode是什么,它的优点和特点,如何下载和安装等。 安装和设置部分应该涵盖不同操作系统上的安装步骤和注意事项。同时,还应该介绍不同配置选项,如主题、字体、缩进设置等。 编辑器布局部分应该解释各个面板和视图的作用,如侧边栏、编辑窗口、终端等。详细说明如何调整布局以优化工作流程。 常用快捷键部分应该列举常用的快捷键和相关操作,如快速打开文件、搜索、查看定义等。应该对不同功能区分操作系统进行说明。 实用插件和扩展部分应该介绍一些常见和有用的插件,如代码片段、代码格式化、调试器等。应该详细解释如何安装和使用这些插件。 调试功能部分应该详细介绍如何配置和使用调试器,括设置断点、查看变量的值等。 版本控制部分应该介绍如何使用内置的版本控制工具,如Git,如何提交、推送和拉取代码等。 最后,代码片段部分应该教授如何创建和使用代码片段,以提高编码效率。 以上仅是对全网详细的VSCode教程的一些简要描述。当然,真正最详细教程可能比这个更加全面和详细,具体内容可能还括更多高级功能和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值