Data-Transformation
如何在 R 中的寬格式和長格式之間更改數據?[關閉]
您可以擁有寬格式或長格式的數據。這是非常重要的事情,因為可用的方法不同,具體取決於格式。我知道你必須使用reshape 包
melt()並cast()從 reshape 包中工作,但似乎有些東西我沒有得到。有人可以給我一個簡短的概述,你是如何做到這一點的?
在 Hadley Wickham 的網站上有幾個資源包(現在稱為
reshape2),其中包括Journal of Statistical Software 中關於該包的論文的鏈接。這是論文中的一個簡短示例:
> require(reshape2) Loading required package: reshape2 > data(smiths) > smiths subject time age weight height 1 John Smith 1 33 90 1.87 2 Mary Smith 1 NA NA 1.54我們注意到數據是寬格式的。要進入長格式,我們將
smiths數據框熔化:> melt(smiths) Using subject as id variables subject variable value 1 John Smith time 1.00 2 Mary Smith time 1.00 3 John Smith age 33.00 4 Mary Smith age NA 5 John Smith weight 90.00 6 Mary Smith weight NA 7 John Smith height 1.87 8 Mary Smith height 1.54請注意如何
melt()選擇其中一個變量作為 id,但我們可以通過參數明確說明要使用的變量'id':> melt(smiths, id = "subject") subject variable value 1 John Smith time 1.00 2 Mary Smith time 1.00 3 John Smith age 33.00 4 Mary Smith age NA 5 John Smith weight 90.00 6 Mary Smith weight NA 7 John Smith height 1.87 8 Mary Smith height 1.54這是另一個示例
?cast:#Air quality example names(airquality) <- tolower(names(airquality)) aqm <- melt(airquality, id=c("month", "day"), na.rm=TRUE)如果我們存儲熔化的數據幀,我們可以轉換成其他形式。在
reshape(稱為reshape2)的新版本中,有函數acast()並分別dcast()返回類似數組的(數組、矩陣、向量)結果或數據框。這些函數還採用聚合函數(例如mean())來提供熔融形式的數據摘要。例如,根據上面的空氣質量示例,我們可以為數據集中的變量生成廣義的月平均值:> dcast(aqm, month ~ variable, mean) month ozone solar.r wind temp 1 5 23.61538 181.2963 11.622581 65.54839 2 6 29.44444 190.1667 10.266667 79.10000 3 7 59.11538 216.4839 8.941935 83.90323 4 8 59.96154 171.8571 8.793548 83.96774 5 9 31.44828 167.4333 10.180000 76.90000
reshape2:melt()和配對acast()中實際上只有兩個主要功能。dcast()查看這兩個函數的幫助頁面中的示例,查看 Hadley 的網站(上面的鏈接)並查看我提到的論文。那應該讓你開始。你也可以看看 Hadley 的
plyr包,它做類似的事情,reshape2但設計做更多的事情。