1. 程式人生 > >dplyr:六個基本資料處理技法

dplyr:六個基本資料處理技法

摘要

本文簡介如何使用 dplyr 與 base R 語法進行六個基本資料處理技法,並支援初學者先從 dplyr 開始做基本資料處理技法這個論點。

論點起源

在 Tidyverse:R 語言學習之旅的新起點一文中我們提到過新興的 R 語言學習路徑可以從 tidyverse 這個套件起始,而非傳統的 Base R;這個論點其實源自於 DataCamp 現任的首席資料科學家 David Robinson,他的前一份工作是在 Stack Overflow 擔任資料科學家。

不過 tidyverse 是一個非常龐大的生態系,它有點像是懶人包,將未來可能

會用到的套件都囊括進去,這點必定是極簡風格使用者的忌諱;不過常用套件:magrittr、dplyr 或 ggplot2 等都是 tidyverse 的核心成員,中高階使用者可以選擇不要安裝整個 tidyverse,只挑選安裝會派上用場的元件。

試試水溫

對於初學者,可以在安裝 tidyverse 之前,先嘗試看看 dplyr 這個 tidyverse 的敲門磚;假如 ggplot2 被譽為繪圖的文法(grammar of graphics),那麼 dplyr 就是資料處理的文法(grammar of data manipulation),如果喜歡,就可以接著走新興路徑,接著試 ggplot2;假如不喜歡,就改走 Base R 的傳統路徑。

那又該怎麼判斷自己是否會喜歡 dplyr 呢?在本篇文章中,我們會簡介 dplyr 的六個基本資料處理技法:篩選、選擇、新增、排序、摘要與分組,同時互動參照使用 base R 的寫法該怎麼實踐,初學者應當能夠在執行過後得到一個較喜歡的做法,又或者直接採納本文的觀點。

前置作業

需要安裝載入 dplyr,然後手動建立一個資料框 strawhat。

install.packages("dplyr")
library(dplyr)

strawhat <- data.frame(
  name = c("Monkey D. Luffy", "Roronoa Zoro", "Nami", "Usopp", "Vinsmoke Sanji", "Tony Tony Chopper", "Nico Robin", "Franky", "Brook"),
  gender = c("Male", "Male", "Female", "Male", "Male", "Male", "Female", "Male", "Male"),
  age = c(19, 21, 20, 19, 21, 17, 30, 36, 90),
  height = c(174, 181, 170, 176, 180, 90, 188, 240, 277),
  stringsAsFactors = FALSE
)

View(strawhat)

One Piece, Google Search

篩選女性船員

dplyr 使用 filter 函式、base R 使用原生中括號。

# dplyr::filter() ---------
strawhat %>%
  filter(gender == "Female")

# base R ------------------
strawhat[strawhat$gender == "Female", ]

選擇姓名與年紀

dplyr 使用 select 函式、base R 使用原生中括號。

# dplyr::select() ---------
strawhat %>%
  select(name, age)

# base R ------------------
strawhat[, c("name", "age")]

新增兩年前的年紀

dplyr 使用 mutate 函式、base R 直接將衍生變數的算式指派給新變數。

# dplyr::mutate() ---------
strawhat %>%
  mutate(age_before = age - 2)

# base R ------------------
strawhat$age_before <- strawhat$age - 2
strawhat

以身高遞減排序

dplyr 使用 arrange 函式、base R 則以 order 函式取得觀測值順序後以原生中括號擺放位置。

# dplyr::arrange() --------
strawhat %>%
  arrange(desc(height))

# base R ------------------
strawhat[rev(order(strawhat$height)), ]

摘要平均年齡

dplyr 使用 summarise 函式、base R 直接對變數計算。

# dplyr::summarise() ------
strawhat %>%
  summarise(avg_age = mean(age))

# base R ------------------
avg_age <- mean(strawhat$age)
avg_age

分性別摘要平均年齡

dplyr 使用 group_by 函式、base R 則使用 aggregate 函式。

# dplyr::group_by() -------
strawhat %>%
  group_by(gender) %>%
  summarise(avg_age = mean(age))

# base R ------------------
aggregate(strawhat$age, by = list(strawhat$gender), FUN = mean)

本文觀點

快速操作過 dplyr 與 Base R 語法後,不知道讀者是否已經心裡有譜?若還是拿不定主意,本文觀點是篩選、選擇、新增與摘要這四個技法上,dplyr 與 base R 算得上無差異,但是在排序及分組上,dplyr 的好用與直觀程度都勝過 base R,總結來說,我們支援初學者從 dplyr 做基本資料處理技法開始。

 

轉載:https://medium.com/datainpoint/dplyr-%E5%85%AD%E5%80%8B%E5%9F%BA%E6%9C%AC%E8%B3%87%E6%96%99%E8%99%95%E7%90%86%E6%8A%80%E6%B3%95-d6cf16606fd0?fbclid=IwAR3yn4-31o6R0X1pSNlhSgGwOvMudjTDOKHlJT_1pt33Y6wFAKacQWTNrg4