johny-vino-745781-unsplash
 程式與統計資料處理

Reshaping Data using tidyr | 資料合併與分離、變長或變寬的小技巧 | R 統計

介紹 tidyr 套件中四款基本資料整理函數,包括gather(), spread(), separate(), unite()。其中gather()和spread()功能互補,一個將「寬」資料堆疊成「長」資料,另一個則將「長」資料擴展為「寬」資料。而separate()和unite()則是用做分裂或合併變數。

tidyr package

本學習筆記會介紹 tidyr 套件所提供數據整理的基本四種功能,包括:

  • gather(): 將「寬」資料變「長」
  • spread(): 將「長」資料變「寬」
  • separate(): 將單一欄位切分成多個欄位
  • unite(): 將多個欄位合併成單一欄位

以下載入所需套件 tydyr和dplyr

%>% Operator

雖然非必要,但套件tidyr和dplyr都會使用magrittr套件中的pipe operator %>%,可以方便快速的串接多行指令。該運算元會將前一個指令或函數運算所產生的結果投入下一個指令或函數,比如說,在篩選資料時的指令:

filter(data, variable == numeric_value)

or

data %>% filter(variable == numeric_value)

以上兩者的結果會是一樣的。

gather() function

目的: 將「寬」資料重塑成「長」資料

說明: 有時會遇到資料沒有妥當堆疊,諸多感興趣的共同屬性分在多個欄位,此時就需要將這些感興趣的共同屬性重新聚合成單一變數,透過gather()函數,可將多個欄位折疊為成對的key-value。比如說:

而以下指令亦可產生相同結果

separate() function

目的: 將單一變數一切為二

說明: 很多時候單一變數欄位會包含多個變數,或是部分變數你不感興趣,如以下範例:

在這個範例中,我們目標是希望將每個變數字串分離。可以使用separate()函數來達成此目標,將單一字串變數拆分成多個欄位。

而以下指令亦可產生相同效果

unite() function:

目的: 將兩個變數合併為一

說明: 很多時候會想將兩個變數合併成一個新的變數,此時就可透過unite()函數來達成(與separate()為互補函數),如以下範例:

separate_df

而以下指令亦可產生相同效果

spread() function:

目的: 將「長」資料重塑成「寬」資料

說明: 有時會我們會需要將長的資料轉換成寬的資料,spread()函數則能將指定的成對key-value擴展成多個欄位(是gather()函數的互補函數)。


更多資料處理學習筆記:

  1. 資料處理-實用的10個小技巧 | Data Processing Basics FAQ | R 語言

參考資料連結:

  1. 歐萊禮  R資料科學
  2. Reshaping Your Data with tidyr