首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据管理—reshape2包

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

——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决定每天尽力吧,能把学到的写出来多少就写多少。

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

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

学习数据挖掘交流平台

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171208G0NM4N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券