今天的文章來自這裡
Reshape Package in R: Long Data format, to Wide, back to Long again 我們在做資料的時候,為了配合不同的演算法、公式、統計套件、或整理報表需求,我們常常需要將資料轉來轉去。最簡單的轉法就是行列交換(又稱轉置、transpose),但是實務上,這種轉置用途太小了,我們需要更複雜的變形。
下圖是個常見到資料庫儲存方式:兩個不同的factor:iv1和iv2,dv是不同的factor組合的結果值,如果我們要將這種data(本文稱之為long format),轉換成另外一種形式(本文稱之為wide format)要怎麼做呢?
上圖轉換成下圖?
這時候如果是SAS就有功能很強大的transpose、SPSS無解、EXCEL好像有解但是很複雜,那如果是R呢?那就是要使用"Reshape"這個套件。
Get in Shape! The Reshape Package
以下面的例子來看:資料集有四個變項,分別是rank、class、spec、和dps
1
2
| full_list_cutdown = data.frame ( "rank" =full_list_dps$X., "class" =full_list_dps$class, "spec" =full_list_dps$spec, "dps" =full_list_dps$DPS) |
The data look like this:
接下來我們要用cast這個函數來將DATA變形:
1
| cast (dataset, factor1 ~ factor2 ~ etc., value=value column, fun=aggregation method) |
dataset:代表著目標的dataset
factor1~factor2~etc:表示等下要以什麼變項為主軸來轉置。(譯按:在轉置時的想像類似小時候拿圓規畫圓,針腳插著的變項是軸心,其他變項以主軸為圓心來轉置)
value:表示等下需要做其他計算的變項
fun=:有點類似sql語法中的參數,可以計算轉置後變項的平均值之類的,也支援自訂function
下列是將上面data轉置的語法:
1
| wide_frame = data.frame ( cast (full_list_cutdown, rank~class, value= c ( 'dps' ), fun=mean)) |
轉置後的data如下圖,除了轉置之外,也另外計算的dps這個變項的平均值
There and Back Again: Getting from Wide to Long Format
要轉回去就要用melt的指令
1
| melt (wide_frame, id= c ( "rank" )) |
(譯按:這個指令的命名真的很有趣,下令要DATA變形--cast(施展之意),要讓變形後的data恢復原狀--就用melt(消解,消解原本施下的咒語?))
太實用了!
回覆刪除XD
回覆刪除