reshape包(转载自r实战)
reshape
包是一套重构和整合数据集的绝妙的万能工具。由于它的这种万能特性,可能学
起来会有一点难度。我们将慢慢地梳理整个过程,并使用一个小型数据集作为示例,这样每一步
发生了什么就很清晰了。由于reshape
包并未包含在R的标准安装中,在第一次使用它之前需要
使用install.packages(“reshape”)进行安装。
大致说来,你需要首先将数据“融合”(melt)
,以使每一行都是一个唯一的标识符—变量组
合。然后将数据“重铸”(cast)
为你想要的任何形状。在重铸过程中,你可以使用任何函数对数
据进行整合。将使用的数据集如表所示。
在这个数据集中,测量measurement
是指最后两列中的值(5、6、3、5、6、1、2、4)。每
个测量都能够被标识符变量(在本例中,标识符是指ID
、Time
以及观测属于X1
还是X2
)唯一地确
定。举例来说,在知道ID
为1、Time
为1,以及属于变量X1之后,即可确定测量值为第一行中的5。
melt融合
数据集的融合是将它重构为这样一种格式:每个测量变量独占一行,行中带有要唯一确定这
个测量所需的标识符变量。要融合表中的数据,可使用以下代码:
library(reshape)
md <- melt(mydata, id=(c("id", "time")))
2. cast() 重铸
cast()
函数读取已融合的数据,并使用你提供的公式和一个(可选的)用于整合数据的函
数将其重塑。调用格式为:
newdata <- cast(md, formula, FUN)
其中的md
为已融合的数据,formula
描述了想要的最后结果,而FUN
是(可选的)数据整合函数。
其接受的公式.
在这一公式中,rowvar1+ rowvar2+ ...
定义了要划掉的变量集合,以确定各行的内容,
而colvar1+ colvar2+ ...
则定义了要划掉的、确定各列内容的变量集合。参见图5-1中的
示例。
reshape包例子
library(reshape2)
dstats<-function(x)(c(n=length(x), mean=mean(x), sd=sd(x)))
# measure.vars 欲分类计算的变量名
# id.vars 变量
dfm<-melt(mtcars, measure.vars=c("mpg", "hp", "wt"),id.vars=c("am", "cyl"))
dcast(dfm, am + cyl + variable ~., dstats)
> head(dfm)
am cyl variable value
1 1 6 mpg 21.0
2 1 6 mpg 21.0
3 1 4 mpg 22.8
4 0 6 mpg 21.4
5 0 8 mpg 18.7
6 0 6 mpg 18.1
> cast(dfm, am + cyl + variable ~., dstats)
am cyl variable n mean sd
1 0 4 mpg 3 22.900000 1.4525839
2 0 4 hp 3 84.666667 19.6553640
3 0 4 wt 3 2.935000 0.4075230
4 0 6 mpg 4 19.125000 1.6317169
5 0 6 hp 4 115.250000 9.1787799
6 0 6 wt 4 3.388750 0.1162164
7 0 8 mpg 12 15.050000 2.7743959
8 0 8 hp 12 194.166667 33.3598379
9 0 8 wt 12 4.104083 0.7683069