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ù)的操作符吧,呃嗯,英語跟我一樣不行的建議看右邊 :)
我就簡單的介紹一下這四個操作符吧。
- ":" 該符號表示用于選擇一系列的變量。
- "!":表示取反操作的,類似于在df中不選擇某列,比如df[,-1],表示不選擇第一列
- "&":表示邏輯運算符“與”,表示“且”的意思。A&B,表示滿足條件A,且滿足條件B
- "|":表示邏輯運算符“或”,表示“或”的意思。A|B,表示滿足條件A或者滿足條件B就可以了,通常具有短路操作。
- "c()":就是表示列的組合,其實就是向量,元素可為數(shù)字或者字符串。
之所以單獨拉出來講,是因為后面會用得非常頻繁。image下面還有幾個比較重要的函數(shù),我簡單介紹下,這些函數(shù)可以作為select選擇列的參數(shù)來使用。
- last_col():表示選擇最后一列。
- starts_with():表示以什么開頭的列。
- ends_with():表示以什么結(jié)尾的列。
- contains():表示某列是否包含什么內(nèi)容。
例子:
- 選擇df中的第一列到第五列。
用法:select(df,1:5)或者select(df,c(1,2,3,4,5))
- 選擇df中的mpg到wt之間的所有列,包括(mpg,wt)
用法:select(df,"mpg":"wt")
- 選擇某些列以"d"開頭,或者以"p"結(jié)尾的。
用法:select(df,starts_with("d")|ends_with("p"))
- 選擇某些列以"d"開頭,且以"t"結(jié)尾的。
用法:select(df,starts_with("d")&ends_with("t"))
- 選擇以"d"開頭,且包含"s"的列。
用法:select(df,starts_with("d")&contains("s"))
- 選擇不以"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
between(x,a,b):假設(shè)x是一個數(shù)值型向量,該函數(shù)判斷x中元素是否(>=a)&(<=b),返回一個邏輯型向量。
image
- 選擇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"])第二個參數(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ù);
- mean:均值函數(shù)。
- median():中位數(shù)函數(shù)。
- sd():標(biāo)準(zhǔn)差函數(shù)
- IQR():四分位間距,如果有興趣,可以查看《概率論與數(shù)理統(tǒng)計》(浙大第四版)P132,需要的話,可以加我好友,我發(fā)你。
- mad():中位數(shù)絕對偏差,是不是有點難理解呢,沒關(guān)系,控制臺輸入?mad,查看該函數(shù)文檔,非常詳細(xì)。
imageimage
- quantile:四分位數(shù)函數(shù),第一個參數(shù)為數(shù)值型向量,第二個參數(shù)可以自己定義要返回幾分位數(shù)的值。
需要特別注意的是,該函數(shù)返回的是一個數(shù)值型向量,而不是像其他函數(shù)一樣簡單返回一個數(shù)值。
image
- nth():表示抽取向量中哪一個位置的元素,比如nth(c(1,5,2),2)抽取的是第二個位置的,返回5,還可以通過負(fù)號,來表示抽取倒數(shù)第幾個,比如nth(c(1,5,2),-3),表示抽取倒數(shù)第三個,就是1
- n():返回當(dāng)前分組或者變量的信息,通常是計數(shù),通常用在特定函數(shù),比如summarize,mutate中。
- n_distinct():去重后,再計數(shù)。
- first(),last():參數(shù)可以為一個向量,分別返回向量的第一個值,和最后一個值。
現(xiàn)在開始正式介紹,summarize函數(shù)對數(shù)據(jù)框的使用。
image然后呢,就沒有然后了,但是這僅僅是針對數(shù)據(jù)框的,下面開始準(zhǔn)備介紹針對分組的。
6.group_by 作用:對數(shù)據(jù)框按照一列或者多列進行分組,通常與summarise組合使用。
imageimageimageimage如果你想再多了解一下,可以使用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)針對多個向量的時候:
imageimage總結(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,等
這篇文章寫得還不錯,可以作為參考。
對于文章有疑問的話,可以添加好友與我交流。
以上基本就是dplyr包的中常用函數(shù)了,覺得不錯的話,不妨點贊收藏哦:)