前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据管理—reshape2包

数据管理—reshape2包

作者头像
企鹅号小编
发布2017-12-27 10:20:57
6950
发布2017-12-27 10:20:57
举报
文章被收录于专栏:大数据大数据

我就在这里等你关注,不离不弃

——A·May

R-50T-50

「序 言

不知不觉,已经写了半百的R语言了,感觉等数据准备这个大阶段结束,有必要将数据理解和数据准备这两阶段进行下系统的融合,然后再重新看选模型和建模型的问题。

今天,May带来数据管理常用的工具reshape2,这个包的作用在于可以对数据进行变形,然后组成自己想要的数据内容。包含两个主要的函数,一个是melt融合函数,即把原来“宽型”数据变成一种“长型”;一个是dcast组合函数,即把“长型”的数据变回“宽型”的数据。

下面可以开始来了解reshape2的应用过程。

melt

了解melt

melt对数据的融合,也就是ddply中对数据进行拆分,但是melt的融合是有其固定的格式与要求的,即把数据集分成标识变量、测量变量和测量值三个部分,我们要做的工作主要是根据需求选择适当的标识变量和测量变量。对于概念的理解可以不用急,在看完全文之后,相信你会有深刻的体悟。

melt的函数结构如下:

melt(data,id.vars,measure.vars,na.rm=TRUE/FALSE)

#data是数据框

#id.vars识别变量,可以标识测量变量的唯一测量值

#measure你要进行融合的变量

#na.rm是否排除缺失值

问题1:判别识别变量

首先,请注意,如果标识变量的设置,不能得出测量唯一测量值,那么这个融合过程就会出现问题。可以理解为如果我在下面的实验中选择的识别变量X中存在两个值都是1,那么变量X就不可以作为识别变量,因为如果这样,即使可以进行融合,但是在进行重铸的时候就会发现重铸的数据是计数而不是数据值,这在问题2中有所体现。

其次,如果你的融合结果不是识别变量+variables(测量变量)+value(测量值)的形式,请自检标识变量的选取是否可以得出唯一的变量值。

最后是对id.vars的设置,通常只设置一个id.vars的时候,表中其余变量都作为测量变量,我们可以输入位置确定,也可以输入变量名,这是R的常用形式,比如下图的id.vars=1也可以得出相同的结果。

我们以tbl数据为例,变量X可以单独作为标识变量,其余变量可以作为X的测量变量,因为变量X=1对应测量变量time有唯一确定的值2013-12,对应测量变量AQI的唯一确定值是100。下面将以X作为标识变量,做正确例子。

#因为分出来的行数太多,出现了waring

问题2:measure.vars的使用和defaulting to length的出现

关于melt的分组还是要有目的性,个人不建议所有的数据都是选择一个标识变量,然后其余都是测量变量,这样做可不是一个细致的人。

此外,我们在重组表数据的时候也并非完全会保留所有的变量,所以,用id.vars与mearsure.vars也是一个筛选、应用和组合变量的过程,这和ddply的作用大致相同。

下图中,我选取AQI作为标识变量,PM2.5等指标作为测量变量。

这里,我们先示例一下利用dcast进行重建表。如下图所示,我们建立了新的数据集包含变量AQI和PM2.5等五个指标,我们的基本目的达到了。这里注意测量变量一旦选取,下面重铸的时候必须使用这个选取的测量变量,不能变换,如果要变化,就要重新设置measure.vars。

但是,我们发现输出结果并非是变量值,而且有提示defaulting to length,这里表示默认应用功能是计数。

小伙伴们请注意,如果你也是这样的结果,原因是因为AQI并非是能够识别测量变量的唯一值,我们在选中id.vars的时候出现问题,下列输入中我们可以观察到AQI=84时对应的各项指标计数都是2,表明AQI=84案例有两个,我们需要额外的变量作为识别变量,或者重新选取一个,或者在id.vars中添加其他变量作为识别变量的组合。

同时,上述的情况也并非error,这恰恰是我们利用dcast进行计算的一个方法,如下,我们可以使用简单的sum函数,汇总不同AQI中五项指标的值。

#如图所示,我们计算出汇总不同AQI中五项指标的和。

dcast

了解dcast

对于dcast的重铸和应用功能,小伙伴通过上面的例子应该已经有了大致的了解,所以,我们现在来了解一下dcast函数的构成:

dcast(meltdata,id.vars1+id.vars2~varible1+varbile2,fun)

#meltdata是融合后的数据

#id.vars与varible中间用~区分连接

#fun是应用功能

问题3:建立不同时间段的五项指标在不同污染等级下的数据表

> d

> q

#由图,我们可以得知2013年12月PM2.5在空气质量为良是不存在的,在轻度污染的情况下PM2.5的数值是73,其他以此类推。

我们可以就此输出一个文件,如下:

「结语

有小伙伴问,数据准备和数据管理有什么区别了,为什么在看文的时候会有不同的标题。其实,数据管理的含义要比数据准备更大一些,基本上与数据有关的所有操作都可以视为一种数据管理行为,而数据准备更具有针对性,包括更具需求创建新变量、筛选变量、数据清洗和合并数据等系列操作。所以,用于数据准备工作的函数都是数据管理的一部分,两者没有太大差异。

由于考试季来临,不想G科的我还是打算好好复习,毕竟我们的及格分不是60了,所以对于发文而言,May决定每天尽力吧,能把学到的写出来多少就写多少。

同时,祝小伙伴们科科成绩高,做的全会,蒙的全对,顺利过关。

喜欢本文的小伙伴请多多转发,谢谢大家!

学习数据挖掘交流平台

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档