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

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

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

学习数据挖掘交流平台

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AzMark

Python函数的介绍

1176
来自专栏听雨堂

Pandas对行情数据的预处理

库里是过去抓取的行情数据,间隔6秒,每分钟8-10个数据不等,还有开盘前后的一些数据,用Pandas可以更加优雅地进行处理。 ? 需要把当前时间设置为index...

19310
来自专栏CDA数据分析师

Excel简化办公系列之一 | VLOOKUP代替IF函数

本文为CDA作者青菜原创文章,转载请注明来源 编者按:CDA作者青菜将在近期发布「Excel简化办公」系列文章,本文是第一篇;更多精彩请持续关注~ 在日常工作...

2189
来自专栏机器之心

教程 | 比Python快100倍,利用spaCy和Cython实现高速NLP项目

相关 Jupyter Notebook 地址:https://github.com/huggingface/100-times-faster-nlp

961
来自专栏灯塔大数据

技术 | Python从零开始系列连载(二十六)

为了解答大家学习Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五准时推出,欢迎大家学积极学习转载~

492
来自专栏开发与安全

算法:堆栈与深度优先搜索(迷宫问题)

堆栈的访问规则被限制为Push和Pop两种操作,Push(入栈或压栈)向栈顶添加元素,Pop(出栈或弹出)则取出当前栈顶的元素,也就是说,只能访问栈顶元素而不能...

2049
来自专栏未闻Code

Python列表与deque的区别

802
来自专栏take time, save time

Think in 递归

     网上写递归的文章可以用汗牛充栋来形容了,大多数都非常清晰而又细致的角度上讲解了递归的概念,原理等等。以前学生的时候,递归可以说一直是我的某种死穴,原理...

39912
来自专栏大数据风控

R中如何用ifelse进行数据分组

数据分组,根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间部分来研究,以揭示内在的联系和规律性; 在R中,我们常用ifelse函数来进...

2328
来自专栏北京马哥教育

教程 | 比Python快100倍,利用spaCy和Cython实现高速NLP项目

相关 Jupyter Notebook 地址:https://github.com/huggingface/100-times-faster-nlp

410

扫码关注云+社区