R语言学习 第十三篇:利用reshape2包重塑数据

  数据重塑通常使用reshape2包,reshape2包用于实现对宽数据及长数据之间的相互转换,由于reshape2包不在R的默认安装包列表中,在第一次使用之前,需要安装和引用:

  install.packages("reshape2")

  library(reshape2)

  重塑数据,首先把数据融合(melt),以使每一行都有唯一的标识-变量组合,然后把数据重塑(cast)为想要的任何形状。在重塑过程中,可以使用任何函数对数据进行整合。

  一,认识宽数据

  创建示例数据,这种数据显示叫做数据的短格式,也叫做宽数据:

  > ID <- c(1,1,2,2)

  > Time <- c(1,2,1,2)

  > X1 <- c(5,3,6,2)

  > X2 <-c(6,5,1,4)

  > mydata <- data.frame(ID,Time,X1,X2)

扫描二维码关注公众号,回复: 2223439 查看本文章

  短格式的数据如下图所示,ID和Time的组合是唯一的,X1和X2是该行的观测变量值:

  ID Time X1 X2

  1 1 1 5 6

  2 1 2 3 5

  3 2 1 6 1

  4 2 2 2 4

  二,融合数据

  数据集的融合是指把数据集重构为特定的格式:每个观测变量独占一行,每行都有唯一确定每个观测所需要的标识变量,我们使用melt()函数来融合数据框:

  melt(data,id.vars,measure.vars,variable.name='variable',...,na.rm=FALSE,value.name='value',factorAsStrings=TRUE)

  参数注释:

  data:融合的数据框

  id.vars:由标识变量构成的向量,用于标识观测的变量

  measure.vars :由观测变量构成的向量

  variable.name:用于保存原始变量名的变量的名称

  value.name:用于保存原始值的名称

  示例,标识变量是ID和Time,X1和X2作为观测变量:

  md <- melt(mydata,id=c("ID","Time"),measure=c("X1","X2"))

  数据融合之后,变成所谓的长格式,也称作长数据:

  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

  注意:必须指定唯一确定每个观测所需的变量(ID和Time),而表示观测变量名的变量(X1和X2)由程序自动创建,从结果中可以看出,函数自动创建了两个变量:variable和value,这两个变量名称是默认的,这可以在melt()函数中,通过参数 variable.name="new_variable_name"和 value.name="new_value_name"来自定义。

  md <- melt(mydata,id=c("ID","Time"),measure=c("X1","X2"),variable.name = "MeasuredVariable",value.name = "IntValue")

  三,重塑数据

  dcast()函数用于读取已融合的数据框(d是指data frame),并使用formula和用于整合数据的函数把数据集重塑,

  dcast(data, formula, fun.aggregate = NULL, ..., margins = NULL,

  subset = NULL, fill = NULL, drop = TRUE,

  value.var = guess_value(data))

  参数注释:

  data:已融合的数据框

  formula:用于指定输出的结果集格式

  fun.aggregate:用于指定聚合函数,对已聚合的数据执行聚合运算

  margins:相当于透视表中的行总计和列总计

  subset:选取满足一些特定值的数据,相当于Excel透视表的筛选。例如, subset =.(variable ==“length”)

  参数formula的格式是:

  rowvar1 + rowvar2 +... ~ colvar1 + colvar2 +...

  在该公式中,rowvar 定义了保留的变量名,以唯一确定各行的内容;colvar定义了需要重塑的变量名,以确定各列的值。重塑的含义是:展开或聚合。

  1,展开

  把数据的长格式转化为数据的短格式,也可以说,把长数据展开为宽数据,这种展开操作的formula参数的格式是固定的:标识变量~variable。

  > dcast(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

  2,对观测变量进行聚合运算

  只保留ID,按照ID计算观测变量的平均值:

  > dcast(md,ID~variable,mean)

  ID X1 X2

  1 1 4 5.5

  2 2 4 2.5

  这种操作,类似于分组聚合:按照ID进行分组,分别求变量X1和X2的聚合值。

  3,添加总计列

  计算按照ID分组的X1和X2的均值,并对重塑的结果按照ID计算各列均值,按照X1和X2计算各行的均值。

  > dcast(md,ID~variable,mean,margins = c("ID","variable"))

  ID X1 X2 (all)

  1 1 4 5.5 4.75

  2 2 4 2.5 3.25

  3 (all) 4 4.0 4.00

  计算的过程是:

  按照ID计算各列的均值: X1的值是(5.5+2.5)/2=4

  按照变量计算各行的均值:第一行的均值是 (4+5.5)/2=4.75

  www.hxkfh.com/zhiliaofangshi/20180707120605-3012.html

  www.hxkfh.com/kangfuzhinan/20180707121037-6069.html

  www.hxkfh.com/kangfuzhinan/20180707121522-6070.html

  www.hxkfh.com/kangfuzhinan/20180707123604-6071.html

  www.hxkfh.com/kangfuzhinan/20180709152730-6078.html

  www.hxkfh.com/kangfuzhinan/20180709153211-6079.html

  www.hxkfh.com/kangfuzhinan/20180709153747-6080.html

  www.hxkfh.com/kangfuzhinan/20180709154409-6081.html

  www.hxkfh.com/kangfuzhinan/20180709154927-6082.html

  www.hxkfh.com/kangfuzhinan/20180709155426-6083.html

  www.hxkfh.com/kangfuzhinan/20180709155908-6084.html

  www.hxkfh.com/kangfuzhinan/20180709160620-6085.html

  www.hxkfh.com/kangfuzhinan/20180709161235-6086.html

  www.hxkfh.com/kangfuzhinan/20180711113902-6114.html

  www.hxkfh.com/kangfuzhinan/20180711114352-6115.html

  www.hxkfh.com/kangfuzhinan/20180711135546-6116.html

  www.hxkfh.com/kangfuzhinan/20180711141257-6117.html

  www.hxkfh.com/kangfuzhinan/20180712143510-6139.html

  www.hxkfh.com/kangfuzhinan/20180712145109-6141.html

  www.hxkfh.com/kangfuzhinan/20180712145645-6142.html

  www.hxkfh.com/kangfuzhinan/20180713142608-6154.html

  www.hxkfh.com/kangfuzhinan/20180713143500-6157.html

猜你喜欢

转载自blog.csdn.net/ccf3883472018/article/details/81095054