R語言dplyr包的學習


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,...)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM