相信我,这是全网最详细的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包的中常用函数了,觉得不错的话,不妨点赞收藏哦:)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容