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

首先,我們以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

w7

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

> sdata <- stack(mydata)
> sdata

 w72  


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

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

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

> sdata$ind == "var3"

w73

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


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

 w74  

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

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

arrow
arrow

    CARS 發表在 痞客邦 留言(0) 人氣()