vlambda博客
学习文章列表

R语言入门:函数系列(4)——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数据原来长这个样子

向上滑动阅览

R语言入门:函数系列(4)——melt和cast

如果想看分别看各个不同类型(type)不同生产年份(year)的船只的运营年份(period)、使用时长(service)和发生事故次数(incidents)情况,可使用下列代码实现:

R语言入门:函数系列(4)——melt和cast

得到的数据长这个样子:

向上滑动阅览

R语言入门:函数系列(4)——melt和cast

......

R语言入门:函数系列(4)——melt和cast

......

R语言入门:函数系列(4)——melt和cast



那么这样做什么意义呢?为什么要将宽数据转化为长数据或者将长数据转化为宽数据呢?因为我们在绘图和数据分析时所需要的数据格式存在差异。

在数据分析时,我们所采用的数据通常是宽数据,一个被调查者为一行,一个暴露或结局为一列;与之相对应的,我们在进行图形绘制时,常常需要将多列放置在一列中,例如我们需要在同一张图中绘制出三个结局的时间序列,那么我们就需要将原来的三个结局变量转化为一个三分类变量的列(例如上面代码所展示的示例),然后将这个三分类变量映射为点图的颜色或形状等图形属性,这样就实现了绘图的需求。




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)的情况,可以通过下列代码实现。

R语言入门:函数系列(4)——melt和cast


如果我们想看一下不同类型(type)的船只的运营年份(period)、使用时长(service)和发生事故次数(incidents)的均值,可以通过下列代码实现。

R语言入门:函数系列(4)——melt和cast


如果我们想看一下不同类型(type)不同运营年份(service)、使用时长(period)和发生事故次数(incidents)的船只的生产年份情况(year),可以通过下列代码实现。

R语言入门:函数系列(4)——melt和cast
 

那么本期内容是否对你有帮助呢?如果有用的话,请记得关注、转发、点一波再看哦!





扫描二维码

b站号:熊猫酱啊