指点成金-最美分享吧

登录

小技巧2-melt()函数转换(R)

佚名 举报

篇首语:本文由小编为大家整理,主要介绍了小技巧2-melt()函数转换(R)相关的知识,希望对你有一定的参考价值。

参考技术A

我们常见的数据一般长这样:

作图时常用的形式是这样:(这个就是melt型数据)

ggplot2常用melt型数据,excel里手动进行转换很麻烦

使用reshape2包里的melt()函数就很方便了

melt(data,id.vars,measure.vars,variable.name=“variable”,…,na.rm=FALSE,value.name=“value”,factorsAsStrings=TRUE)

id.vars:标识变量(依旧在列上,保持不变的变量)
measure.vars:度量变量(我们想要放进同一列的变量)
variable.name:为新列取名,如果不取名,默认新增列的列名就是“variable”
value.name:新列对应值所在的变量名

变换需指定哪些数据是id variables,哪些是measured variables

举例1:

注意!这里没有指定“id.vars”和“measure.vars”,所以默认了第一列为的“id.vars(不做变动的列)”,其余所有列都作为“measure.vars(需要melt转换的列)”

如果是复杂一些的表格,则必须明确指出“id.vars”或“measure.vars”:
举例2:
这里"Time[s]"和"Temperature[C]"两列是想要固定不变的列,后三列为3次重复实验的数据,需要转换为melt格式

melt后得到的数据如下:

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站号:熊猫酱啊



以上是关于小技巧2-melt()函数转换(R)的主要内容,如果未能解决你的问题,请参考以下文章