之前在【認識R語言資料結構】文章中有推薦一套件:dplyr,該套件主要功能就是整理資料,讓繁瑣的資料整理變得相當簡單容易,我們在該文章中介紹也實際操作過六大核心函數(filter、select、mutate、summarise、group_by、arrange)。那有時會為了要使分析資料變得容易和讓R讀懂,我們會使用到另外一個Tidtverse家庭中的另一個套件tidyr資料表格長轉寬的技巧。

大家看完敘述可能還不太能理解,讓我們實際操作一次吧:

首先我們用之前我們自己建立的資料框來當作範例使用

consumer <- data.frame(consumer_ID = c(1,2,3,4,5,6,7,8),  

gender=c(‘M’,’F’,’F’,’M’,’F’,’F’,’F’,’M’),

age = c(18,20,21,24,40,33,49,19),

purchase_item=c(“A1″,”A2″,”A1″,”B1″,”B3″,”A1″,”C2″,”C1”),

payment_method=c(“C”,”C”,”M”,”C”,”M”,”D”,”C”,”M”)), 

cost = c(100,200,100,300,600,100,450,350)

我們所建立出來的這個資料框(表格),是所謂的寬表格(wide format),寬表格的特性就是每一列(row)會包含多個觀察值,如編號2的顧客那一列就會顯示為女性、年齡是20、購買品項是A2、付款方式是現金以及花費200元。可以看到寬表格的優點即為呈現的資料量多!接著我們就直接先這個寬表格轉換成長表格,再來看長表格的特性。

要轉換表格,先載入tidyr套件,並使用寬轉長gather() 函數,

#載入套件

install.packages(“tidyr”)

library(tidyr)

#使用gather()函數

con_long <- gather(data = consumer, key = “主鍵”, value = “對應值”, age,cost)

在長表格(long format)中,會有所謂的主鍵(Key)也可以當成是類別變數,以及其對應的數值(Value),那麼就必須在gather()函數中去輸入我們想要聚集( 範例以age,cost) 的數值欄位以及命名。在執行之後,會出現以下表格形式:

可以看到長表格呈現的方式,會以使用者主要想觀察的Key值來做排序呈現,我們不難發現長表格的特性就是每一列(row)只會有一個觀察值(age或cost)。

那學會由寬表格轉成長表格,我們再學由長表格轉為寬表格,而要使用到的函數是  spread() 函數  :

#長轉寬表格 使用spread()函數

con_width <- spread(con_long, key = “主鍵”, value = “對應值”)

View(con_width)

方法是要指定長表格的名稱、主鍵的欄位還有對應值的欄位,執行之後我們檢視它,會發現它就會轉換成我們原來所建立的寬表格資料框!

*總結以上,若是要在寬表格新增額外的資訊,就要新增一個新欄位(例如新增職業類別)。而若是要在長表格中新增資訊,則要新增一個列數(例如新增體身高、體重等)。

以上便是R語言資料表格長寬轉換的完整解說,若您覺得有幫助的話,再請幫我們留個好評,謝謝您的觀看,我們下次見。