R语言入门:函数系列——melt和cast
Posted 从零开始的R世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言入门:函数系列——melt和cast相关的知识,希望对你有一定的参考价值。
函数系列(4)
melt和cast
melt和dcast函数都是来自于reshape2程序包的函数,melt的作用为将宽数据转化为长数据,而dcast的作用为将长数据转化为宽数据,二者互为“逆函数”。
本次推送中用到的数据集为“ships”数据集,共有5个变量,40条数据。
注:type为船的类型;year为生产年份;period为运营年份;sevice为使用时长(月);incidents为发生事故次数。
melt函数
将宽格式数据框转化为长格式数据框,它的代码格式如下:
melt(data, id.vars, measure.vars, variable.name = "variable", ..., na.rm = FALSE, value.name = "value")
data : 所选的数据;
id.vars : 标识变量(就是不需要动的那些列);
measure.vars : 度量变量(除了标识变量之外的所有变量);
variable.name : 对度量变量名这一列进行命名,默认为variable;
na.rm : 是否删除缺失值;
value.name : 对度量变量值的那一列进行命名,默认为“value”。
示例:ships数据原来长这个样子
向上滑动阅览
如果想看分别看各个不同类型(type)不同生产年份(year)的船只的运营年份(period)、使用时长(service)和发生事故次数(incidents)情况,可使用下列代码实现:
得到的数据长这个样子:
向上滑动阅览
......
......
那么这样做什么意义呢?为什么要将宽数据转化为长数据或者将长数据转化为宽数据呢?因为我们在绘图和数据分析时所需要的数据格式存在差异。
在数据分析时,我们所采用的数据通常是宽数据,一个被调查者为一行,一个暴露或结局为一列;与之相对应的,我们在进行图形绘制时,常常需要将多列放置在一列中,例如我们需要在同一张图中绘制出三个结局的时间序列,那么我们就需要将原来的三个结局变量转化为一个三分类变量的列(例如上面代码所展示的示例),然后将这个三分类变量映射为点图的颜色或形状等图形属性,这样就实现了绘图的需求。
cast函数
cast函数:将长格式数据框转化为宽格式数据框(cast函数分为acast和dcast,acast返回的是数组,dcast返回的是数据框,两个函数语句比较相似,今天主要介绍一下dcast的用法)。
dcast(data, formula, fun.aggregate)
data : 所选的数据;
formula描述了想要的最后结果;
其接受的公式形如:rowvar1 + rowvar2 + ... ~ colvar1 + colvar2 + ...;
在这一公式中,rowvar1 + rowvar2 + ...定义了要划掉的变量集合,以确定各行的内容,而colvar1 + colvar2 + ...则定义了要划掉的、确定各列内容的变量集合。
fun.aggregate是(可选的)数据整合函数,比如求均值等等。
示例:
如果我们想看一下不同类型(type)不同生产年份(year)的船只的运营年份(period)、使用时长(service)和发生事故次数(incidents)的情况,可以通过下列代码实现。
如果我们想看一下不同类型(type)的船只的运营年份(period)、使用时长(service)和发生事故次数(incidents)的均值,可以通过下列代码实现。
如果我们想看一下不同类型(type)不同运营年份(service)、使用时长(period)和发生事故次数(incidents)的船只的生产年份情况(year),可以通过下列代码实现。
那么本期内容是否对你有帮助呢?如果有用的话,请记得关注、转发、点一波再看哦!
扫描二维码
b站号:熊猫酱啊
以上是关于R语言入门:函数系列——melt和cast的主要内容,如果未能解决你的问题,请参考以下文章
R语言学习笔记(十七):data.table包中melt与dcast函数的使用
R语言使用reshape2包的melt函数进行dataframe变形将dataframe数据从宽表变换为长表dcast函数把melt函数处理后的数据基于一个自定义公式(formula)从长表到宽表
R语言将dataframe数据从宽表(wide)变为长表(long)实战:tidyr包的gather函数cdata包的unpivot_to_blocks函数data.table使用melt函数
R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)如果没有指定行标识符号,则所有的字段都会放入variable变量中
R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)指定行标识符变量并自定义生成的长表的标识符列的名称