dplyr-高效的数据变换与整理工具--转载
1、背景簡介
在數(shù)據(jù)分析工作中,經(jīng)常需要對原始的數(shù)據(jù)集進行清洗、整理以及變換。常用的數(shù)據(jù)整理與變換工作主要包括:特定分析變量的選取、滿足條件的數(shù)據(jù)記錄的篩選、按某一個或幾個變量排序、對原始變量進行加工處理并生成新的變量、對數(shù)據(jù)進行匯總以及分組匯總,比如計算各組的平均值等。
其實,上述的數(shù)據(jù)處理與變換工作在任何一種SQL語言(如Oracle,MySQL)中都非常容易處理,但是R語言作為一門編程語言,如何高效地完成上述類似SQL語言的數(shù)據(jù)處理功能?本文介紹的R語言dplyr包正是這方面工作的有力武器之一。
dplyr包是 Hadley Wickham (ggplot2包的作者,被稱作“一個改變R的人”)的杰作, 并自稱 a grammar of data manipulation, 他將原本plyr 包中的ddply()等函數(shù)進一步分離強化,專注接受dataframe對象, 大幅提高了速度, 并且提供了更穩(wěn)健的與其它數(shù)據(jù)庫對象間的接口。
本文試圖對該dplyr包的一些基礎(chǔ)且常用的功能做簡要介紹。主要包括:
2、dplyr包使用介紹
2.1 dplyr包的安裝加載與示例數(shù)據(jù)準備
安裝dplyr包。
install.packages("dplyr") library(dplyr)安裝hflights包,該軟件包中的飛機航班數(shù)據(jù)將用于本文中dplyr包各個函數(shù)的演示。
install.packages("hflights") library(hflights)通過以下代碼,簡單了解示例數(shù)據(jù)集hflights。
class(hflights);dim(hflights) head(hflights)輸出結(jié)果如下:
hflights是一個data.frame類型的對象,包含227496條數(shù)據(jù)記錄、21個變量,head函數(shù)展示了前6條數(shù)據(jù)記錄。
在利用dplyr包處理數(shù)據(jù)之前,需要將數(shù)據(jù)裝載成dplyr包的一個特定對象類型(data frame tbl / tbl_df),也稱作 tibble 類型,可以用 tbl_df函數(shù)將數(shù)據(jù)框類型的數(shù)據(jù)裝載成 tibble 類型的數(shù)據(jù)對象。
packageVersion("dplyr") tbl_hflights<-tbl_df(hflights) class(tbl_hflights) tbl_hflights輸出結(jié)果如下:可以看到,將hflights轉(zhuǎn)換成tbl_df類型后,R語言打印數(shù)據(jù)集tbl_hflights的數(shù)據(jù)時,僅打印了適合屏幕寬度的數(shù)據(jù),屏幕顯示不下的剩余兩個變量的數(shù)據(jù)(CancellationCode , Diverted )并沒有打印出來,這使得屏幕上打印出來的數(shù)據(jù)可讀性更強,也更美觀。此外,還在每一列變量名稱的下面顯示了變量的類型。
04.png==p.s. 可以用packageVersion函數(shù)查看dplyr包的版本==
2.2 變量篩選select
select函數(shù)可以通過指定列名選擇指定的變量進行分析。
# 選擇制定的變量 select(tbl_hflights,Year,Month,DayofMonth,FlightNum,Distance) # 用類似于生成數(shù)字序列的方式選擇變量 # 選擇Year開始一直到ArrTime結(jié)束的所有變量 3:10 select(tbl_hflights,Year:ArrTime) # 也可以按照倒過來的順序選擇 select(tbl_hflights,ArrTime:Year) # 除了選擇變量,也可以刪除指定的變量 select(tbl_hflights,-Year,-Month,-DayofMonth,-FlightNum,-Distance) select(tbl_hflights,-(Year:ArrTime)) 05.png06.png
07.png
08.png
09.png
2.3 數(shù)據(jù)記錄篩選filter
filter函數(shù)按照指定的條件篩選符合條件中邏輯判斷要求的數(shù)據(jù)記錄,類似于SQL語句中的where語句中的篩選條件。
# 選擇2011年1月而且起飛時間為1400的所有數(shù)據(jù)記錄 filter(tbl_hflights,Year == 2011, Month == 1, DepTime == 1400) # '且'的關(guān)系也可以用&符號表示,也就是列出的所有條件同時滿足 filter(tbl_hflights,Year == 2011 & Month == 1 & DepTime == 1400) # 選擇起飛時間在1400之前的航班 filter(tbl_hflights,Year == 2011 & Month == 1 & DepTime <= 1400) # '或'的關(guān)系用|符號表示。選擇起飛時間為1400或者1430的航班,且UniqueCarrier為'AA' filter(tbl_hflights,Year == 2011 & Month == 1 & (DepTime == 1400 | DepTime == 1430) & UniqueCarrier == 'AA')上述R語句輸出結(jié)果如下:
10.png
11.png
12.png
13.png
2.4 數(shù)據(jù)排序arrange
arrange函數(shù)按給定的列名進行排序,默認為升序排列,也可以對列名加desc()進行降序排序。
tbl_hflights1<-select(filter(tbl_hflights,Year == 2011 & Month == 1 & DepTime == 1400),Year:ArrTime,AirTime) # 將數(shù)據(jù)按照ArrTime升序排序 arrange(tbl_hflights1,ArrTime) # 將數(shù)據(jù)先按照AirTime降序,再按照ArrTime升序排列 arrange(tbl_hflights1,desc(AirTime),ArrTime)上述R語句輸出結(jié)果如下:
14.png15.png
2.5 變量變換/重構(gòu)mutate
mutate函數(shù)可以基于原始變量重新計算得到新的變量,在做數(shù)據(jù)分析預處理的時候經(jīng)常會用到該功能。
# 由ArrTime-DepTime得到航班的飛行所用時長,并存儲在DurTime變量中 # 飛行所用時長(單位:分鐘)的計算方式為:小時數(shù)*60+分鐘數(shù) # 同時將飛行的分鐘數(shù),換算成秒。 # 優(yōu)勢在于可以在同一語句中對剛增加的列進行操作。 tbl_hflights2<-mutate(tbl_hflights1, DurTime = (as.numeric(substr(ArrTime,1,2)) - as.numeric(substr(DepTime,1,2)))*60 + as.numeric(substr(ArrTime,3,4)) , Dur_Time1 = DurTime * 60) tbl_hflights2上述R語句輸出結(jié)果如下:
16.png2.6 數(shù)據(jù)匯總summarize
summarize函數(shù)實現(xiàn)對數(shù)據(jù)的匯總,比如求和、計算平均值等。
# 計算航班平均飛行時長 summarize(tbl_hflights2,avg_dur = mean(DurTime),sum_air = sum(AirTime))上述R語句輸出結(jié)果如下:
18.png
2.7 數(shù)據(jù)分組group_by
group_by函數(shù)實現(xiàn)對數(shù)據(jù)進行分組,結(jié)合summarize函數(shù),可以對分組數(shù)據(jù)進行匯總統(tǒng)計。
上述R語句輸出結(jié)果如下:
19.png2.8 多步操作連接符%>%
dplyr包里還新引進了一個操作符,%>%, 使用時把數(shù)據(jù)集名作為開頭, 然后依次對此數(shù)據(jù)進行多步操作。
這種運算符的編寫方式使得編程者可以按數(shù)據(jù)處理時的思路寫代碼, 一步一步操作不斷疊加,在程序上就可以非常清晰的體現(xiàn)數(shù)據(jù)處理的步驟與背后的邏輯。
上述R語句輸出結(jié)果如下:
20.png2.9 挑選隨機樣本sample_n, sample_frac
sample_n隨機選出指定個數(shù)(樣本容量)的樣本數(shù);sample_frac隨機選出指定百分比(占整個數(shù)據(jù)集總體百分比)的樣本數(shù)。
上述R語句輸出結(jié)果如下:
21.png22.png
3、參考文獻與其他學習資料
3.1 dplyr包中自帶的參考資料查看
可以通過如下名稱查看dplyr包中自帶的參考資料。
# 查看自帶的參考資料 vignette(package = "dplyr") vignette("introduction", package = "dplyr") 23.png 24.png3.2 本文寫作用到的參考鏈接
R語言擴展包dplyr筆記
R語言擴展包dplyr——數(shù)據(jù)清洗和整理
3.3 RStudio官網(wǎng)的cheatsheet
data-wrangling-cheatsheet
26.png 25.png作者:monkeylan
鏈接:https://www.jianshu.com/p/b2abad66cb01
來源:簡書
簡書著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請聯(lián)系作者獲得授權(quán)并注明出處。
轉(zhuǎn)載于:https://www.cnblogs.com/nkwy2012/p/9236933.html
總結(jié)
以上是生活随笔為你收集整理的dplyr-高效的数据变换与整理工具--转载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux CentOS7虚拟机修改静态
- 下一篇: baidu卫兵新版力推三级加快器 电脑一