reshape包:重构和整合数据集的绝妙的万能工具;install.packages("reshape")
①变量重命名函数rename:rename(dataframe, c(oldname="newname", oldname="newname",…))
举例:w <- rename(w, c(mpg = "Miles/(US) gallon",cyl = "Number of Cylinders"))
②数据融合函数melt()和重铸函数cast():类似数据透视表的功能,多维数据结构转一维数据结构,一维数据结构转多维数据结构
>( mydata<-data.frame(ID=c(1,1,2,2),Time=c(1,2,1,2),X1=c(5,3,6,2),X2=c(6,5,1,4)))
ID Time X1 X2
1 1 1 5 6
2 1 2 3 5
3 2 1 6 1
4 2 2 2 4
> #标识符ID、Time、X1|X2能唯一的确定第四个值,类似二维结构转一维的结构
> library(reshape)
> #融合
> md<-melt(mydata,id=c("ID","Time"))
ID Time variable value
1 1 1 X1 5
2 1 2 X1 3
3 2 1 X1 6
4 2 2 X1 2
5 1 1 X2 6
6 1 2 X2 5
7 2 1 X2 1
8 2 2 X2 4
> #重铸cast(md,formula,FUN),其中md为已融合的数据,formula描述了想要的最后结果,而FUN是数据整合函数
> #执行整合,类似excel的数据透视表
> cast(md,ID~variable,mean)
ID X1 X2
1 1 4 5.5
2 2 4 2.5
> cast(md,Time~variable,mean)
Time X1 X2
1 1 5.5 3.5
2 2 2.5 4.5
> cast(md,ID~Time,mean)
ID 1 2
1 1 5.5 4
2 2 3.5 3
> #不执行整合
> cast(md,ID+Time~variable)
ID Time X1 X2
1 1 1 5 6
2 1 2 3 5
3 2 1 6 1
4 2 2 2 4
> cast(md,ID+variable~Time)
ID variable 1 2
1 1 X1 5 3
2 1 X2 6 5
3 2 X1 6 2
4 2 X2 1 4
> cast(md,ID~variable+Time)
ID X1_1 X1_2 X2_1 X2_2
1 1 5 3 6 5
2 2 6 2 1 4
###reshape包的融合函数melt和重铸函数cast
names<-LETTERS[1:8]
lv<-c(10,10,30,30,40,40,50,60)
type<-c(1,2,2,1,3,3,1,2)
vip<-c(1,0,0,1,0,1,1,1)
amount<-c(15,35,75,90,200,150,400,350)
(mydata<-data.frame(names,lv,type,vip,amount))
#融合的过程即列转行的思想,多维转一维的思想
#以type&vip两列进行数据的融合,其他列指标全部融入variable列,其值则在value列中
library(reshape)
(melt.mydata<-melt(mydata[,2:5],id=c("type","vip")))
#重铸cast(data,formula=...~variable,fun=NULL)
#data参数为已经融合好的data.frame
#formula参数为最后重铸数据形式的公式:rowvar1+rowvar2+...~colvar1+colvar2+...
#fun参数为以某个函数进行最后的数据统计,这个参数不填写,默认为统计
fun<-function(x){c(mean=mean(x),sum=sum(x))}#创建具有两个统计数值的函数
cast(melt.mydata,type~variable)#不设置函数参数默认为计数
cast(melt.mydata,type~variable,fun)#以type变量作为行标识,以variable变量组合作为列变量
cast(melt.mydata,type+vip~variable,fun)#行标识加多vip
cast(melt.mydata,type~variable|vip,fun)#这种formula形式可以把vip维度进行分表展现