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