我就在这里等你关注,不离不弃
——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决定每天尽力吧,能把学到的写出来多少就写多少。
同时,祝小伙伴们科科成绩高,做的全会,蒙的全对,顺利过关。
喜欢本文的小伙伴请多多转发,谢谢大家!
学习数据挖掘交流平台
领取专属 10元无门槛券
私享最新 技术干货