dplyr包可以看作是plyr包的一個擴展,主要是針對數據框的數據操作。
在使用dplyr包中的函數對數據框進行操作之間,最好將其轉換為tbl對象:tbl_df()
一個很好的效果是,tbl對象可以根據顯示空間大小來進行部分顯示。
利用dplyr包常見的數據操作可歸納為以下5種:
1. 篩選 filter()
按給定的邏輯判斷篩選出符合要求的子數據集, 返回符合條件的子數據集的行。類似於 base::subset() 函數
filter(.data, ...) .data為數據集,...為邏輯判斷條件,多個參數條件相當於and連接
此外,... 還有一些特殊用法:
- ==,>,>= 等
- &,|,!,xor()
- is.na(),colname %in% c("factor1","factor2")
- between(),near()
2. 排列 arrange()
按給定的列名依次對行進行排序.這個函數和 plyr::arrange() 是一樣的, 類似於 order()
arrange(.data, ...) ... 一串逗號分割無引號的列名。默認升序,可利用desc()進行降序
3. 選擇 select()
用列名作參數來選擇子數據集,類似於R自帶的 subset() 函數
select(.data, ...) ...是無引號一系列的以逗號分割的表達式。可以是列名
此外,... 還有一些特殊用法:
- starts_with(x,ignor.case = TRUE) # 選擇以字符x開頭的變量
- ends_with(x,ignore.case = TRUE) # 選擇以字符x結尾的變量
- contains(x,ignore.case = TRUE) #選擇所有包含x的變量
- matches(x,ignore.case = TRUE) #選擇匹配正則表達式的變量
- num_range(“x”,1:5,width = 2) #選擇從x01到x05的數值型變量
- one_of(“x”,”y”,”z”) #選擇包含在聲明變量中的變量
- everything() #選擇所有變量,一般調整數據集中變量順序時使用
- - #排除列名
- : #mpg : disp也就相當於2:4,選擇從mpg到disp的所有列
另外,select還可用於改列名。
select(iris, petal_length = Petal.Length)
相當於 rename(iris, petal_length = Petal.Length)
只是,select返回的是所選中的列,而rename返回的是所有列。
4. 擴展 mutate()
對已有列進行數據運算並添加為新列,並保留原始變量。作用與 plyr::mutate() 相同, 與base::transform() 相似, 優勢在於可以在同一語句中對剛增加的列進行操作。而同樣操作用R自帶函數 transform() 的話就會報錯
mutate(.data, ...) ... 名字-值的成對表達式,利用colname=NULL扔掉變量
此外,... 還有一些特殊用法:
- +,- 等
- log()
- lead(),lag()
- dense_rank(), min_rank(), percent_rank(), row_number(), cume_dist(), ntile()
- cumsum(), cummean(), cummin(), cummax(), cumany(), cumall()
- na_if(), coalesce()
- if_else(), recode(), case_when()
另注意:mutate添加新變量並保留原變量;而transmute扔掉原始變量。
同時與之比較相關的函數有mutate_all(),mutate_at(),mutate_if()
類似的有:transmute_all(),transmute_at(),mutate_if()
summarise_all(),summarise_at(),summarise_if()
group_by_all(),group_by_at(),group_by_if()
5. 匯總 summarise()
對數據框調用其它函數進行匯總操作, 返回一維的結果,等同於 plyr::summarise(),
summarise(.data, ...) ... 名字-值的表達式,值是匯總函數
此外, ... 還有一些特殊用法:
- Center: mean(), median()
- Spread: sd(), IQR(), mad()
- Range: min(), max(), quantile()
- Position: first(), last(), nth(),
- Count: n(), n_distinct()
- Logical: any(), all()
其實,summarise()常被用於匯總經group_by后的分組數據,並且每個組輸出一行
分組操作 group_by()
根據某些變量進行分組。
group_by(.data, ..., add = FALSE) ... 用於分組的變量,add=false,覆蓋現有組,true在現有組基礎上添加
與之對應的還有,去除分組ungroup(x,...)