這篇文章講資料的基本處理。主要用到的就是
tidyverse
套件系統。它提供了資料科學的一些實用的函式。
我們首先要安裝 tidyverse
套件系統。
如果是第一次安裝套件,會讓你選擇 CRAN repository 的 mirror,就近選擇一個就好。我是有選擇台大的鏡像站。另外,如果你想要更換鏡像站的話,在 PyCharm 下的步驟如下:
- 打開側邊欄 R Tools,切換到 Packages。
- 點按上面的“+”。
- 點按 Manage Repositories。
- 在彈出的視窗中點按 @CRAN@,然後點按上面的筆形按鈕。
- 在彈出的視窗中選擇 Repository。
在 R Studio 中的步驟請自行 Google。
資料輸入
資料輸入套件 readr
readr
是 tidyverse
套件系統中的一個套件,專門用於處理資料的輸入。其中的函式有 read_csv()
用於輸入 .csv
資料檔, read_excel()
輸入 excel 資料檔,read_delim()
輸入不同分隔符號的資料檔。
其中 read_delim()
函式的定義如下:
解釋一下引數:
- file:路徑與檔名
- delim:分隔符號
- quote:視同分隔符號(資料的文字變數值常放在雙引號中)
- escape_backslash:預設 FALSE,是否有逃脫符號
- escape_double:預設 TRUE,是否用引號符號作為逃脫符號
- col_names:設定變數名(T 或 F)
- col_types:設定變數的類型
- na:設定 NA 符號
- comment:設定注釋符號,在注釋符號之後的文字不會被讀入
- trim_ws:去除變數值得空白
- skip:要跳過幾行(row)才開始讀入資料
- n_max:最大輸入行數
整潔資料
所謂整潔資料(tidy data),可以認為是一個使用 R 進行處理的資料標準。該標準的基本要求如下:
- 每個變數各自形成一欄(縱行, column)
- 每個列(橫列, row)各自為一個觀測時間的測量
- 一個檔案只用一張資料表(sheet)
- 一個欄位(縱行, Column)只有一個變數,同時有清楚的變數名
- 若完整資料包含不同資料表,則不同資料表要有索引(inxex)或指標變數(id)可進行關聯與串聯
Tibble與Data Frame
透過 readr
套件讀入的資料會被儲存成 tibble 物件。它相較於 data.frame 幾乎無差別,只是多了一些方便 tidyverse
處理的屬性。
使用 as.data.frame()
函式可以將 tibble 物件轉成 data.frame。使用 as_tibble()
函式也可以將 data.frame 轉換成 tibble。
資料流動管道運算指令
運算指令為 %>%
,稱為 pipe,由 tidyverse
套件系統中的 magrittr
套件提供。
運算指令的左側通常是資料物件,包括資料框架、矩陣、向量等。右側則通常是函式。在流動過程中,左側的資料物件自動成為右側函式的第一個引數。
資料檢視函式 glimpse()
在讀入資料之後,我們必須對資料進行檢視,從而確定資料是否有被正確讀入。在 tidyverse
套件系統的 tibble
套件中提供一個檢視資料的函式 glimpse()
,該函式類似於 R base 中的 str()
。
執行效果如下:
資料處理
資料處理的套件主要是 tidyverse
套件系統中的 dplyr
套件。用於將讀入的資料進行處理和統計操作。
選擇個體函式 filter()
從這個函式的名字也可以知道,這個函式和 JS、Java 等程式語言中的 filter 類似,都是起到一個過濾器的作用。在 Excel 中,也有類似的方法實現條件的過濾。
例如,我們想要選擇上面 survVATrial.csv
檔案內容中,threat
為 placebo
,cellcode
為 large
的內容:
依據變數值排序函式 arrange()
預設情況下從小到大排序,如果要反排,可以使用 desc()
函式。
選擇變數或欄位子集函式 select()
透過選擇欄位,可以建立欄位子集,將需要的變數儲存起來進行分析,這樣可以大大加速分析執行速度。
變數轉換函式 mutate()
使用 mutate()
函式,可以將變數進行一定形式的變換,形成一欄新的變數。
三因素運算函式 if_else()
這個函式類似於C家族程式語言中的三因素運算元 ?:
,其定義如下:
解釋:如果 condition
的值為 TRUE,回傳 true
的值,否則回傳 false
的值。missing = NULL 表示遺失值應當以什麼字元替代。
變數重新命名函式 rename()
可以將變數重新命名:
移除遺失資料 drop_na()
使用 tidyr
套件中的函式 drop_na()
可將缺失值個體移除。請注意,缺失值移除將完全移除一個個體。只要該列中任意一個變數為NA,則將該列完全移除。
隨機抽樣函式 sample_n()和sample_frac()
這兩個函式可以對資料進行隨機抽樣。引數如下:
- size = k:設定所要抽出之樣本數或分率。
- weight:抽取之相對應權重,若無設定,則權重相等。
- replace = FALSE:設定是否可以重複抽取。
明顯不同個體選擇函式 distinct() 和 n_distinct()
舉例來說,假設你有一個資料框包含了某個學校的學生資訊,裡面有學生的姓名、性別和年級等欄位。如果有幾個學生重名,那麼使用 distinct() 函式就能快速地找出資料框中唯一不重複的學生資料列。
使用橫列指標選出個體函式 slice()
slice()
為一系列函式,可以利用橫列指標(row index)選出個體(row)。
- slice()
- slice_head():選出資料最前端的個體
- slice_last():選出資料最末端的個體
- slice_min():選出資料變數值最小的個體
- slice_max():選出資料變數值最大的個體
- slice_sample():隨機選出個體
計算常見統計量函式 summarise()
smmarise()
函式可以計算常見的統計量,比如個數、平均值、變異數等等,並將計算結果單獨作為一個變數插入原始資料中。
資料分組操作函式 group_by()
資料分析常常需要類別變數分組,個別操作資料或進行計算統計量。函式 group_by()
引數可放入類別變數,然後分組進行相同資料分析。
多變數計算統計量函式 summarise_all()
summarise()
函式只能分別對當一變數進行計算,若要同時對許多變數進行相同操作,可使用以下函式:
- summarise_all():對每一個變數進行相同操作
- summarise_each():對每一個變數進行相同操作, 需加變數名
- summarise_at():對選出的變數進行相同操作 需加變數名
- summarise_if():對符合特定條件的變數進行相同操作
資料聯集與交集函式
- intersect():交集
- union():并集
- setdiff():差集
資料合併函式
資料經常儲存再不同檔案,例如門診檔,住院檔,實驗室檔,同一位個體常須使用個體辨識碼(id)或姓名(names)進行合併或清理。用來連結不同資料的個體辨識碼或變數稱為“關鍵碼”或“所引鍵”(key)。
在 tidyverse
套件系統中,有一些函式可以實現這樣的合併作業。
- inner_join(x, y):包函 x 與 y 都配對存在的 y 與 y 個體與變數
- left_join(x, y):包函所有 x 個體與變數且在 y 有配對存在的 y 個體與變數
- right_join(x, y):包函所有y個體與變數且在x有配對存在的x個體與變數
- full_join(x, y):包函所有 x 與 y 的個體與變數資料
- semi_join(x, y):包函 x 在 y 有配對存在的 x 個體與變數
- anti_join(x, y):包函 x 在 y 無配對存在的 x 個體與變數