tidyr:進階的資料處理技法

案例討論、簡介長寬表格與 tidyr 套件

Yao-Jen Kuo
數聚點文摘

--

摘要

本文從工作上碰到的資料處理問題為出發點,簡介長表格、寬表格與 tidyr 套件,並實際應用資料轉置解決問題。

惱人的部分

我有一個 Excel 試算表,內容有產品、通路、價格與各月份銷售數量等欄位,每月的收入需要把各月份與價格相乘,需要更有效率的方式能夠快速計算出不同月份、季度與年度的收入。

原始的試算表

先看一下原始的試算表為何給我們帶來了困擾?

原始的試算表

每個月份的銷售數量儲存在不同的欄位中,導致計算每月收入時,必須得用價格與 12 個欄位相乘,萬一還要計算季度或年度收入,這個做法就顯得有點辛苦,得想別的辦法;解決這個問題之前,我們得先暸解表格儲存資料時常見的兩種外觀樣式:寬表格(wide format)與長表格(long format)。

寬表格與長表格

我們先手動創建一個資料框 strawhat_wide,它是屬於寬表格的外觀樣式。

寬表格(wide format)

之所以稱呼為寬表格很直觀,如果要加入更多的相關資訊(例如職業、生日之類)是增加欄位

同樣的資料如果是以長表格的外觀樣式呈現,我們可以將年齡與身高兩個數值欄位整理為鍵(key)值(value)配對的兩欄,會長得像是:

長表格

之所以稱呼為長表格同樣很直觀,倘若要加入更多的相關資訊,就會是加入新的鍵值配對,這時就是增加列數(像是體重、懸賞金額)。

tidyr 套件

在 R 語言中要如何實踐寬表格轉長表格、長表格轉寬表格呢?透過 tidyr 套件可以輕鬆完成:

  • 寬表格轉長表格:gather() 函數

指定寬表格名稱、鍵的欄位名稱(在本例中是 keys)、值的欄位名稱(在本例中是 values)以及要聚集的數值欄位(在本例中是 age、height)。

  • 長表格轉寬表格:spread() 函數

指定長表格名稱、鍵的欄位名稱(在本例中是 keys)、值的欄位名稱(在本例中是 values)。

解決問題

將 12 個銷售量欄位聚集為月份(key)與銷售量(value)兩個欄位,然後再對應月份新增季度欄位,如此可以快速分組算出月份、季度與年度的收入。我們寫作一個 get_quarter 函數來對照 12 個月份的名稱至季的名稱;寫作一個 get_long_format 函數來取得要用來摘要的資料。

整理好的資料

將原始的試算表資料整理為長表格的外觀並新增了季度欄位後,要回答原本的問題:計算月份、季度與年度的總收入,就顯得游刃有餘!

只要掌握資料樣式、長寬表格的轉置技法,就可以提高原有的資料處理效率,特別是原本必須定期手動處理的資料。

如果您喜歡這篇文章,有好多方式可以表達:- 請多按幾下「拍手」圖像支持
- 追蹤作者不錯過新的文章
- 轉發給您的朋友們
- 分享連結到自己的社群網站
- 成為我們的贊助者
- 訂閱 DataInPoint!

喜歡 DataInPoint 的文章嗎?成為我們的贊助者吧!

--

--