R package: dplyr 無痛分析dataframe

在R裡面處理數據前處理時,dplyr 是非常強大的一個封包,其主要設計的理念有三個:

  1. 整合所有在前處理數據會常用的“邏輯”,變成簡單易懂的函數,比如:過濾特定行、針對特定行資料作出彙整等等。
  2. 底層使用c++撰寫,讓其處理時速度較快
  3. 其在“輸入”的檔案支持性良好,支持多種資料庫的串接

dplyr是由Hadley Wickham開發的,承接plyr的邏輯。語法上加入pipeline的概念,可以寫得非常精簡。

dplyr package 最重要的5個函數,其實就代表在資料前處理的普遍操作

  • select
    • 挑選特定column出來
  • filter
    • 自訂條件濾掉column中的資料
  • arrange
    • 調整row排列順序
  • mutate
    • 以現有的column資料做運算,形成新的column
  • summarise
    • 將目前的資料做統計運算,形成統計結論

當然新版本的dplyr其實會把輸入的檔案,轉換成tbl/tibble的格式,在資料呈現和內建的處理邏輯會有些不同,可能要小心,這邊寫其中一個用原生data.frame處理邏輯轉入到使用dplyr可能會遇到的。隨者使用tidyverse的包越來越多,會發現Hadley Wickham有一套很棒的計畫在逐漸把R原生的"較不直覺的"語法改進。

以下分別示範在dplyr中這幾個用法:

使用常用的mtcars資料集做示範:

select

data("mtcars")
mtcars %>% str()

這筆資料由Motor Trend US 雜誌所提供,總共有32部介於1973-74年出產的汽車其性能的資訊。

screenshot.png

screenshot.png

Select :挑選特定欄位進行分析,其利害的地方其實是這個函數的子函數:

  1. starts_with() 挑選欄位名稱開頭有""字串的欄位
  2. ends_with()   挑選欄位名稱結尾有""字串的欄位
  3. contains()       挑選欄位名稱中包含""字串的欄位
  4. matches()       挑選欄位名稱符合""字串的欄位
select(mtcars, starts_with("m"))
select(mtcars,  ends_with("b"))
select(mtcars, contains("ra"))
select(mtcars, matches("a"))
select(mtcars, disp, am)

Filter: 根據特定條件篩選資料
filter的使用就蠻直覺的,可以直接在後面接logical條件,且可以直接使用欄位名稱


filter(mtcars, cyl == 8)
filter(mtcars, cyl < 6)

# Multiple criteria
filter(mtcars, cyl < 6 & vs == 1)
filter(mtcars, cyl < 6 | vs == 1)

# Multiple arguments are equivalent to and
filter(mtcars, cyl < 6, vs == 1)

這邊整理filter可以使用的一些“logic”表示法

Logic symbol
== 等於
!= 不等於
> 大於
< 小於
%in% 包含於
is.na() 是否為NA值

Arrange: 將資料根據特定欄位來排序
預設是將數值由小到大排下去,假如有NA值的話,直接排最後,使用desc則變成由大到小,其本身支持multiple arrange


arrange(mtcars, cyl, disp)
arrange(mtcars, desc(disp))

Mutate:由已有的行經過“處理(加減乘除等等)”,產生新的行

mutate(mtcars, displ_l = disp / 61.0237)

Summarise:總結行資料,形成單一值
summarise的函數,可能是需要多點練習,才會比較熟稔他的邏輯,其就是將資料進行sum, mean, median等等,原本r語言中,用來進階統計內建函數可以上場的時候。

summarise(mtcars, mean(disp))
summarise(group_by(mtcars, cyl), mean(disp))
summarise(group_by(mtcars, cyl), m = mean(disp), sd = sd(disp))

其實除了這五個基本函數外,dplyr封包中有很多進階的功能,可以進一步來活用!

這邊有Rstudio精心整理的cheat sheet,可以用來幫助學習

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s