R軟體的寬資料與長資料

當我們對單一資料蒐集對象測量多個變數值時,寬資料是指同一對象的所有測量值都排在同一列;長資料則是各個測量值單獨成一列,並標明其是哪個變數的測量值。某些統計分析須使用寬資料,例如相關分析;也有些分析偏好長資料,例如變異數分析。

 

首先,我們以data.frame 函數建一個五個蒐集對象、三個變數的寬資料:

> mydata <- data.frame(var1 = c(12, 15, 19, 22, 15), var2 = c(18, 12, 42, 29, 44), var3 = c(8, 17, 22, 19, 31))

>mydata

f:id:DataScience:20140817123740p:plain

運用stack 函數可將資料轉成長資料,

> sdata <- stack(mydata)

> sdata

f:id:DataScience:20140817123957p:plain

stack 函數還可使用select 參數選擇要轉換成長資料的變數,此處我們選var1 和var2。

> sdata <- stack(mydata, select = c(var1, var2))

讀者可利用下列指令檢查長資料十筆數據中均無var3!

>sdata$in == "var3"

[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

 

反過來說,unstack 函數可將長資料轉換為寬資料,要注意的是必須使用R 中的公式符號(formula notation) 'values ~ ind',此處解讀為依不同的ind 值將values 歸類。最後,對於更複雜的長寬資料格式轉換,讀者可運用R 中的reshape 套件,這個部分容後再敘。

 

> mydata <- unstack(sdata, values ~ ind)

> head(mydata)

f:id:DataScience:20140817124601p:plain

 

 參考資料:Spector, P. (2008), Data Manipulation with R, Springer.

撰文者:
鄒慶士 博士
現任:
北商資訊與決策科學所教授
中華 R 軟體學會理事長
信箱:
vince.tsou@gmail.com