注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mobius-Band

 
 
 

日志

 
 

R语言reshape2包笔记  

2015-07-11 00:37:01|  分类: R |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
reshape2包是reshape包的重写版,都是对数据进行清洗、整合、汇总。reshape2包的核心思想是创造一个“熔化”的数据集版本(通过melt函数),然后“投射”(用dcast或acast函数)到一个对象中。

默认的情况下,melt函数将因子和整数值变量当作编号变量来处理,把其余的变量作为分析变量。你也可以通过melt函数中的id.var=或measure.var=这两个参数自行设定编号变量和分析变量。

我们以R中自带的state.x77和state.region两个数据集合并起来形成的数据集为例:

states=data.frame(state.x77,state=row.names(state.x77),region=state.region,row.names = 1:50)

R语言reshape2包笔记 - Mobius-Band - Mobius-Band

library(reshape2)
mstates=melt(states)

R语言reshape2包笔记 - Mobius-Band - Mobius-Band

 melt函数会自动以state和region两个变量为编号变量,其余的变量和数值都会“熔”到variable和value这两个变量中。

R语言reshape2包笔记 - Mobius-Band - Mobius-Band

还可以设置id.var参数改变保留的变量

mstates=melt(states,id.vars = c("state","region","Population"))

R语言reshape2包笔记 - Mobius-Band - Mobius-Band

melt后的数据框通过dcast或acast函数进行汇总,dcast返回结果是数据框,acast返回结果是数组。我们这里以dcast函数为例。常用的参数如下:

dcast(data,formula,fun.aggregate = NULL,subset = NULL,value.var = guess_value(data))

formula参数决定了输出的格式,以“~”左边的变量为列,以“~”右边的变量为行。还可以用"."表示整体性汇总,"..."表示公式中没包含的其他变量。

dcast(mstates,...~variable)

用上述代码可以将数据框还原成原始数据框的形式。

fun.aggregate指定汇总函数,默认函数是length。

subset指定的变量子集

dcast(mstates,...~variable,subset = .(variable=="Population"))

需要注意的是,.(variable=="Population")这个表达式需要加载plyr包才能这样使用。所得到的结果如下:

R语言reshape2包笔记 - Mobius-Band - Mobius-Band

 通过设置了subset参数,结果只显示Population的汇总。

value.var参数可以设置汇总变量,如果对原始数据使用dcast函数,设置好value.var参数,就可以实现Excel中数据透视表的功能。

数据透视表所实现的是将一个变量作为行或列,对另一个变量进行汇总计算。利用dcast函数就可以实现这种功能,如:

dcast(states,region~.,fun.aggregate =mean,value.var = "Population")

注意这里用的是原始数据,因为使用melt函数处理过后的数据,已经没有“Population”这个变量了。

R语言reshape2包笔记 - Mobius-Band - Mobius-Band

 这里可以汇总出每个大地区的平均人口数。

以上介绍的reshape2包中的dcast函数,它在某些功能上与reshape包中的cast函数还是有些许不同。下面来介绍一下reshape包中cast函数的一些优点:

cast(mstates,region~variable,subset = variable %in% c("Population","Life.Exp"),fun.aggregate = c(mean,sd))

R语言reshape2包笔记 - Mobius-Band - Mobius-Band

 由上述代码可以看出,cast在subset参数上的设置更为简洁,在fun.aggregate参数中可以一次设置两个汇总函数比dcast函数效率要高。

同时为了提供更多的灵活性,可以用"|"使cast生成一个列表而非数据框。

cast(mstates,variable~.|region,subset = variable %in% c("Population","Life.Exp"),fun.aggregate = c(mean,sd))

R语言reshape2包笔记 - Mobius-Band - Mobius-Band

这样会生成一个列表,以"|"后面的变量的每一个水平为一个元素。

  评论这张
 
阅读(157)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018