相信我,這是全網(wǎng)最詳細(xì)的dplyr教程

R語言包 dplyr之常用函數(shù)

一、安裝

我的環(huán)境:win10 64位。R版本:4.0 dplyr版本 :1.0.5

或者使用packageVersion("dplyr")#查看你的R包版本

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

install.packages("dplyr")
(.packages()) #查看當(dāng)前R運行環(huán)境有哪些包可用。
detach("package:dplyr") #將加載進R運行環(huán)境的包移除,不是刪除包!

二、加載包

library("dplyr")

三、查看包中有哪些函數(shù)和函數(shù)的具體信息

help(package="dplyr") #查看包中有哪些函數(shù)

?select #查看包中的select函數(shù)的文檔,或者使用help(函數(shù)名)

example(select) #有關(guān)select函數(shù)的例子

四、數(shù)據(jù)集

本文使用的是R自帶的數(shù)據(jù)集,mtcars

如果你是使用R或者Rstudio,建議使用df<-tbl_df(mtcars),這樣df看起來會比較簡潔。

但是我是用的jupyter lab,所以我就直接使用df<-mtcras,改個名了。

數(shù)據(jù)集預(yù)覽:

image

五、常用函數(shù)介紹

PS:df為dataframe數(shù)據(jù)框的簡稱,以下統(tǒng)稱df

1.select 作用:選擇df中列的函數(shù)。

?help或者h(yuǎn)elp(select),即可查閱該函數(shù)的文檔。

該函數(shù)的第一個參數(shù)為df,第二個參數(shù)如下。

現(xiàn)在來了解下該函數(shù)的操作符吧,呃嗯,英語跟我一樣不行的建議看右邊 :)

我就簡單的介紹一下這四個操作符吧。

  1. ":" 該符號表示用于選擇一系列的變量。
  1. "!":表示取反操作的,類似于在df中不選擇某列,比如df[,-1],表示不選擇第一列
  1. "&":表示邏輯運算符“與”,表示“且”的意思。A&B,表示滿足條件A,且滿足條件B
  1. "|":表示邏輯運算符“或”,表示“或”的意思。A|B,表示滿足條件A或者滿足條件B就可以了,通常具有短路操作。
  1. "c()":就是表示列的組合,其實就是向量,元素可為數(shù)字或者字符串。
之所以單獨拉出來講,是因為后面會用得非常頻繁。
image

下面還有幾個比較重要的函數(shù),我簡單介紹下,這些函數(shù)可以作為select選擇列的參數(shù)來使用。

  • last_col():表示選擇最后一列。
  • starts_with():表示以什么開頭的列。
  • ends_with():表示以什么結(jié)尾的列。
  • contains():表示某列是否包含什么內(nèi)容。

例子:

  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"結(jié)尾的。
用法:select(df,starts_with("d")|ends_with("p"))
  1. 選擇某些列以"d"開頭,且以"t"結(jié)尾的。
用法:select(df,starts_with("d")&ends_with("t"))
  1. 選擇以"d"開頭,且包含"s"的列。
用法:select(df,starts_with("d")&contains("s"))
  1. 選擇不以"d"開頭,且以"p"結(jié)尾的列.
用法:select(df,!(starts_with("d"))&(ends_with("p")))

好了,我現(xiàn)在向大家來介紹一下這個包中引進的管道符:%>%

如果你使用過Linux系統(tǒng),你對管道符應(yīng)該會比較了解,現(xiàn)在來看下R中的吧。

用法:df%>%select(mpg,wt)->df1,運行一下,看看是不是選擇了df中的,mpg,wt兩列呢,并且我們將結(jié)果賦值給了變量df1

作用1:將df,傳遞到select函數(shù)中的第一個位置,事實上,我們還可以通過"."作為占位符,來將df放到任意位置。

比如df%>%select(mpg,wt,.),注意看,wt后面有一個點,當(dāng)然這條語句是不能正常運行的,我只是想告訴大家,通過“點”作為占位符,可以將上一個結(jié)果,放到下一個管道中的任意位置。

作用2:有沒有發(fā)現(xiàn)用了管道符之后,我們再次使用列名mpg的時候,便不需要使用df$mpg了呢,沒錯,它的另外一個功能就是類似于attach,數(shù)據(jù)綁定的功能,使用管道符,能讓我們的代碼更加簡潔。

2.filter 作用:用來篩選行的函數(shù)。

該函數(shù)的第一個參數(shù)依然是df,第二個參數(shù)與上面的select的用法其實差不多。

首先來看下第二個參數(shù)的操作符吧,值介紹一個,其余的,大家應(yīng)該都能看懂。

image
  1. between(x,a,b):假設(shè)x是一個數(shù)值型向量,該函數(shù)判斷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"])

第二個參數(shù),作為篩選滿足條件的df的行,其實非??简灤蠹业幕竟?。它不像select函數(shù)篩選列那么簡單,但是,只要弄明白了,第二個參數(shù)是用來篩選行的,再對照對照select函數(shù),其實還是不難的。

3.arrange 作用:用來使df按照一列或者多列進行排序

1.使df按照mpg列升序排列,wt列,降序排列。

arrange(df,"mpg",desc("wt")) 默認(rèn)是升序,如需降序,則使用desc()函數(shù)。

4.mutate 作用:產(chǎn)生新的列,保留舊的列。

下面我們一起搭配,管道符,以及select函數(shù)來操作一下。

df%>%select(cyl,gear,wt)%>%mutate(

cyl2=cyl*2,

gear4=gear*4,

wt=NULL #將值設(shè)置為NULL,可將這列刪除

)%>%head()

結(jié)果如下:

image

首先,我們將df通過管道,送入select函數(shù)的第一個位置中,然后篩選出了cyl,gear,wt三列。

然后我們通過mutate函數(shù),增加了cyl2,gear4兩列,并且將wt列給刪除掉了。

假如我們想指定這些新增加的列放在哪個列之前或者之后,我們使用 .before=原來df中的某個列名,我們可以將新增加列,放在原來的那個列名前面,注意before參數(shù)前面有個點!!,.after表示放在某個列之后。

5.summarise 作用:主要對數(shù)據(jù)框或者分組變量進行統(tǒng)計性描述。

還是先來看下文檔的官方描述吧。

image

這個函數(shù)我主要講解的是,它針對數(shù)據(jù)框的使用,至于它針對分組變量的使用,我將放在group_by函數(shù)中講解。

下面我將繼續(xù)介紹一下常用函數(shù),這對于summarize非常有用。

image

下面我將介紹幾個常用的函數(shù);

  1. mean:均值函數(shù)。
  2. median():中位數(shù)函數(shù)。
  3. sd():標(biāo)準(zhǔn)差函數(shù)
  4. IQR():四分位間距,如果有興趣,可以查看《概率論與數(shù)理統(tǒng)計》(浙大第四版)P132,需要的話,可以加我好友,我發(fā)你。
  5. mad():中位數(shù)絕對偏差,是不是有點難理解呢,沒關(guān)系,控制臺輸入?mad,查看該函數(shù)文檔,非常詳細(xì)。
image
image
  1. quantile:四分位數(shù)函數(shù),第一個參數(shù)為數(shù)值型向量,第二個參數(shù)可以自己定義要返回幾分位數(shù)的值。

需要特別注意的是,該函數(shù)返回的是一個數(shù)值型向量,而不是像其他函數(shù)一樣簡單返回一個數(shù)值。

image
  1. nth():表示抽取向量中哪一個位置的元素,比如nth(c(1,5,2),2)抽取的是第二個位置的,返回5,還可以通過負(fù)號,來表示抽取倒數(shù)第幾個,比如nth(c(1,5,2),-3),表示抽取倒數(shù)第三個,就是1
  2. n():返回當(dāng)前分組或者變量的信息,通常是計數(shù),通常用在特定函數(shù),比如summarize,mutate中。
  3. n_distinct():去重后,再計數(shù)。
  4. first(),last():參數(shù)可以為一個向量,分別返回向量的第一個值,和最后一個值。

現(xiàn)在開始正式介紹,summarize函數(shù)對數(shù)據(jù)框的使用。

image

然后呢,就沒有然后了,但是這僅僅是針對數(shù)據(jù)框的,下面開始準(zhǔn)備介紹針對分組的。

6.group_by 作用:對數(shù)據(jù)框按照一列或者多列進行分組,通常與summarise組合使用。

image
image
image
image

如果你想再多了解一下,可以使用example(group_by)去看看這個函數(shù)的案例。

7.sample_n 作用:從給定的數(shù)據(jù)框中,采樣n個數(shù)據(jù)。

下面的df同上面的df,為R內(nèi)置數(shù)據(jù)集mtcars

replace表示是否放回抽樣,默認(rèn)為FALSE,不放回抽樣,如果需要放回抽樣,則需要設(shè)置為 replace=TRUE

sample_n(df,5,replace=FALSE) 采樣df的5條數(shù)據(jù)

8.sample_frac 作用:從給定的數(shù)據(jù)框中,采樣多少比例的數(shù)據(jù)。

replace表示是否放回抽樣,默認(rèn)為FALSE,不放回抽樣,如果需要放回抽樣,則需要設(shè)置為 replace=TRUE

sample_frac(df,0.5,replace=FALSE) 從df中,采樣50%的數(shù)據(jù)。

9.case_when 作用:針對向量元素,對符合條件的,做操作。

當(dāng)使用這個函數(shù)的時候,有幾點,我希望你能特別注意以下幾點:

1.當(dāng)向量中的元素不符合條件時候,會被當(dāng)做NA,你操作的向量元素個數(shù),和case_when輸出的向量元素個數(shù)相等。

2.每個條件的執(zhí)行是有順序的,順序從上往下執(zhí)行!

3.輸出的向量的類型必須是統(tǒng)一的,要么為數(shù)值型向量,要么為字符型向量,是什么類型取決于最上面執(zhí)行的條件判斷。

4.當(dāng)進行兩個向量間的條件判斷的時候,兩個向量的元素個數(shù)必須相等

好了,估計說得有點繞,下面我用兩個例子,你應(yīng)該就明白了。

格式為:case_when(

條件1~針對條件1進行的操作,

TRUE~某操作

)

其中,符號"~"可理解為賦值操作。TRUE 可理解為else,注意else的范圍是最大的,如果放在第一行,并且進行的是賦值操作,那么就會返回你賦的值,如果是針對向量元素的操作,那么返回的還是一個向量。見下圖。

image

當(dāng)針對單個向量的時候:

image

當(dāng)針對多個向量的時候:

image
image

總結(jié)一下:類型,順序非常重要,你稍不注意類型,便會報錯。

10.if_else 作用:對向量進行條件篩選,然后操作。

這個函數(shù)更像是case_when的迷你版

if_else(條件,滿足條件的元素的操作,不滿足條件的元素的操作)

看一下文檔的案例,你就會了

image

11.集合操作

以下集合操作均可針對向量進行操作。

a<-1:5

b<-3:8

image

12.distinct 作用:對數(shù)據(jù)框進行去重。

格式:distinct(df,變量名1,變量名2,.keep_all=FALSE) 參數(shù)介紹見圖。

image

13.數(shù)據(jù)框連接操作:inner_join, left_join, right_join, full_join,等

這篇文章寫得還不錯,可以作為參考。

http://www.itdecent.cn/p/1f4c7bfed3d4

對于文章有疑問的話,可以添加好友與我交流。

以上基本就是dplyr包的中常用函數(shù)了,覺得不錯的話,不妨點贊收藏哦:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容