dplyr軟體包是R中功能最強大,最受歡迎的軟體包之一。該軟體包由最受歡迎的R程式設計師Hadley Wickham編寫,他編寫了許多有用的R軟體包,如ggplot2,tidyr等。本文包括一些示例和如何使用使用dplyr軟體包來清理和轉換數據。這是一個關於數據操作和數據處理的完整教程。
什麼是dplyr?dplyr是一個強大的R軟體包,用於處理,清理和匯總非結構化數據。簡而言之,它使得R中的數據探索和數據操作變得簡單快捷。
dplyr有什麼特別之處?軟體包「dplyr」包含許多主要使用的數據操作功能,例如應用過濾器,選擇特定列,排序數據,添加或刪除列以及聚合數據。這個包的另一個最重要的優點是學習和使用dplyr函數非常容易。也很容易回想起這些功能。例如,filter()用於過濾行。
dplyr與基本R函數dplyr函數處理速度比基本R函數快。 這是因為dplyr函數是以計算有效的方式編寫的。 它們在語法上也更穩定,並且比向量更好地支持數據幀。
SQL查詢與dplyr數十年來人們一直在使用SQL來分析數據。 每個現代數據分析軟體如Python,R,SAS等都支持SQL命令。 但SQL從未被設計為執行數據分析。 它專為查詢和管理數據而設計。 有許多數據分析操作在SQL失敗或使簡單的事情困難。 例如,計算多個變量的中位數,將寬格式數據轉換為長格式等。而dplyr軟體包的設計目的是進行數據分析。
dplyr函數的名稱類似於SQL命令,如用於選擇變量的select(),group_by() - 通過對變量進行分組來組合數據,join() - 將兩個數據集合在一起。 還包括inner_join()和left_join()。 它也支持SQL常用的子查詢。
如何安裝和加載dplyr軟體包要安裝dplyr軟體包,請鍵入以下命令。
install.packages("dplyr")
要加載dplyr包,請在下面輸入命令
library(dplyr)
常用的dplyr的函數在本教程中,我們使用以下數據,其中包含2002年至2015年各州產生的收入。注意:此數據不包含各州的實際收入數據。
該數據集包含51個觀測值(行)和16個變量(列)。 下面顯示了數據集前6行的快照。
數據集下載連結(密碼:9ny3)
如何加載數據提交以下代碼。 在下面的代碼中更改文件路徑。
mydata <- read.csv("D:/datasets/sampledata.csv")
實例1:隨機選擇N行sample_n函數從數據框(或表)中隨機選擇行。 函數的第二個參數告訴R要選擇的行數。
sample_n(mydata, 3)
sample_frac函數隨機返回N%的行。 在下面的例子中,它隨機返回10%的行。
sample_frac(mydata, 0.1)
實例3:基於所有變量(完整行)刪除重複行distinct函數用於消除重複行
x1 <- dplyr::distinct(mydata)
在此數據集中,沒有單個重複行,因此返回的行數與mydata中的行數相同。
實例4:基於單個變量刪除重複行.keep_all函數用於保留輸出數據框中的所有其他變量。
x2 <- dplyr::distinct(mydata, Index, .keep_all= TRUE)
實例5:基於多個變量刪除重複行在下面的例子中,我們使用兩個變量 - Index,Y2010來確定唯一性。
x3 <- dplyr::distinct(mydata, Index, Y2010, .keep_all= TRUE)
實例6:選擇變量(或列)假設你被要求只選擇幾個變量。 下面的代碼選擇變量「Index」,從「State」到「Y2008」的列。
mydata2 <- select(mydata, Index, State:Y2008)
實例7:刪除變量變量前面的減號表示R放棄變量。
mydata3 <- select(mydata, -Index, -State)
上面的代碼也可以寫成:
mydata4 <- select(mydata, -c(Index, State))
實例8:選擇或刪除以」Y」開始的變量starts_with()函數用於選擇以字母開頭的變量。
mydata5 <- select(mydata, starts_with('Y'))
在starts_with()之前添加一個負號表示將刪除以』Y』開始的變量
mydata6 <- select(mydata, -starts_with('Y'))
以下函數可幫助您根據名稱選擇變量。
mydata7 <- select(mydata, contains('l'))
實例10:重新排列變量下面的代碼保持變量』State』在前面,其餘的變量跟隨其後。
mydata8 <- select(mydata, State, everything())
實例11:變量重命名rename函數可用於重命名變量。
在下面的代碼中,我們將』Index』變量重命名為』Index1』。
mydata9 <- rename(mydata, Index1=Index)
names(mydata9)
實例12:選擇行假設你需要子集數據。 您想過濾行並僅保留Index等於A的那些值。
mydata10 <- filter(mydata, Index == "A")
實例13:多重選擇標準%in%運算符可用於選擇多個項目。 在下面的程序中,我們告訴R選擇Index列中的』A』和』C』行。
mydata11 <- filter(mydata, Index %in% c("A", "C"))
實例14:選擇標準中的』AND』條件假設你需要應用』AND』條件。 在這種情況下,我們在「索引」欄中選擇』A』和』C』的數據,並在2002年收入超過130萬美元。
mydata12 <- filter(mydata, Index %in% c("A", "C") & Y2002 >= 1300000 )
實例15:選擇標準中的』OR』條件『|』表示邏輯條件中的或。 它意味著這兩個條件中的任何一個。
mydata13 <- filter(mydata, Index %in% c("A", "C") | Y2002 >= 1300000)
實例16:非條件「!」 符號用於反轉邏輯條件。
mydata13 <- filter(mydata, !Index %in% c("A", "C"))
實例17:包含條件grepl函數用於搜索模式匹配。 在下面的代碼中,我們正在查找state列包含「Ar」的記錄。
mydata14 <- filter(mydata, grepl("Ar", State))
實例18:總結選定的變量在下面的例子中,我們計算了變量Y2015的平均值和中位數。
summarise(mydata, Y2015_mean = mean(Y2015), Y2015_med=median(Y2015))
實例19:總結多個變量在下面的例子中,我們計算了記錄的數量,變量Y2005和Y2006的平均值和中位數。 summarise_at函數允許我們通過名稱選擇多個變量。
summarise_at(mydata, vars(Y2005, Y2006), funs(n(), mean, median))
實例20:用自定義函數進行總結我們也可以在匯總功能中使用自定義函數。 在這種情況下,我們計算記錄數,缺失值的數量,變量Y2011和Y2012的平均數和中位數。 點(.)表示函數的第二個參數中指定的每個變量。
summarise_at(mydata, vars(Y2011, Y2012),
funs(n(), missing = sum(is.na(.)),
mean(., na.rm = TRUE),
median(.,na.rm = TRUE)))
實例21:總結所有的數字變量summarise_if函數允許您有條件地總結。
summarise_if(mydata, is.numeric, funs(n(),mean,median))
或者
numdata <- mydata[sapply(mydata,is.numeric)]
summarise_all(numdata, funs(n(),mean,median))
實例22:總結因子變量我們正在檢查分類(因子)變量中的級別/類別數量和缺失觀察數量。
summarise_all(mydata["Index"], funs(nlevels(.), nmiss=sum(is.na(.))))
實例23:按多個變量排序數據arrange()函數的默認排序順序是遞增的。 在這個例子中,我們通過多個變量來排序數據。
arrange(mydata, Index, Y2011)
假設你需要按降序對其中一個變量進行排序,而對其他變量則按升序排序。
arrange(mydata, desc(Index), Y2011)
實例24:按分類變量匯總數據我們通過變量Index計算變量Y2011和Y2012的變量的計數和均值。
t <- summarise_at(group_by(mydata, Index), vars(Y2011, Y2012), funs(n(), mean(., na.rm = TRUE)))
或者
t <- mydata %>% group_by(Index) %>%
summarise_at(vars(Y2011:Y2015), funs(n(), mean(., na.rm = TRUE)))
實例25:過濾分類變量中的數據假設您需要從「A」,「C」和「I」類別的變量索引中抽取前兩行。
t <- mydata %>% filter(Index %in% c("A", "C","I")) %>% group_by(Index) %>%
do(head( . , 2))
實例26:通過分類變量選擇第三最大值我們正在通過變量Index計算變量Y2015的第三個最大值。 以下代碼首先僅選擇兩個變量Index和Y2015。 然後它用』A』,』C』和』I』過濾變量索引,然後對變量進行分組,然後按降序對變量Y2015進行排序。 最後,它選擇第三行。
t <- mydata %>%
select(Index, Y2015) %>%
filter(Index %in% c("A", "C","I")) %>%
group_by(Index) %>%
do(arrange(.,desc(Y2015))) %>%
slice(3)
像SQL一樣,dplyr使用窗口函數來將數據分組。 它返回值的向量。 我們可以使用min_rank()函數來計算上例中的rank,
t <- mydata %>% select(Index, Y2015) %>%
filter(Index %in% c("A", "C","I")) %>%
group_by(Index) %>%
filter(min_rank(desc(Y2015)) == 3)
實例27:總結,分組和排序在這種情況下,我們通過變量Index來計算變量Y2014和Y2015的均值。 然後通過計算的變量Y2015的均值對結果進行排序。
t <- mydata %>%
group_by(Index)%>%
summarise(Mean_2014 = mean(Y2014, na.rm=TRUE),
Mean_2015 = mean(Y2015, na.rm=TRUE)) %>%
arrange(desc(Mean_2015))
實例28:創建一個新變量以下代碼用變量Y2015除以Y2014的的值其命名為「change」。
mydata15 <- mutate(mydata, change=Y2015/Y2014)
實例29:將所有變量乘以1000它創建新的變量並用後綴「_new」命名。
mydata11 <- mutate_all(mydata, funs("new" = .* 1000))
實例30:計算變量的排名假設您需要計算變量Y2008至Y2010的排名。
mydata17 <- mutate_at(mydata, vars(Y2008:Y2010), funs(Rank=min_rank(.)))
您在閱讀中,有什麼見解,請評論。
連結:https://www.listendata.com/2016/08/dplyr-tutorial.html
版權聲明:作者保留權利,嚴禁修改,轉載請註明原文連結。
關於更多數據科學內容,請閱讀R語言系列文章。
數據人網是數據人學習、交流和分享的平臺http://shujuren.org 。專注於從數據中學習到有用知識。
平臺的理念:人人投稿,知識共享;人人分析,洞見驅動;智慧聚合,普惠人人。
您在數據人網平臺,可以1)學習數據知識;2)創建數據博客;3)認識數據朋友;4)尋找數據工作;5)找到其它與數據相關的乾貨。
我們努力堅持做原創,聚合和分享優質的省時的數據知識!
我們都是數據人,數據是有價值的,堅定不移地實現從數據到商業價值的轉換!
【R語言】公眾號,誠邀各位數據人投稿,您可以原創,也可以翻譯,小編微信:luqin360,等候您。
點擊閱讀原文,進入數據人網,學習數據知識。
數據人網(http://shujuren.org)誠邀各位數據人來平臺分享和傳播優質數據知識。
公眾號推薦:
360區塊鏈,專注於360度分享區塊鏈內容。
腳印英語,專注於分享實用口語內容。