Data-Transformation

如何在 R 中的寬格式和長格式之間更改數據?[關閉]

  • February 21, 2011

您可以擁有寬格式或長格式的數據。這是非常重要的事情,因為可用的方法不同,具體取決於格式。我知道你必須使用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但設計做更多的事情。

引用自:https://stats.stackexchange.com/questions/7439

comments powered by Disqus