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
但設計做更多的事情。