问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何使用reshape包进行数据汇总

发布网友 发布时间:2022-04-27 03:27

我来回答

1个回答

热心网友 时间:2022-04-13 04:18

  在数据分析过程中,利用各种图表进行数据探索是必要的前期工作。描述性统计中就包括了直方图、散点图等工具来探索连续数据,对于分类数据,则可以采用条形图、交叉分组表等工具。Excel中所谓的“数据透视表”,其实就是一个交互式的交叉分组表。在R语言中可以很容易的用table()等函数得到相应的结果。对于一些更为复杂的任务,就需要其它的函数或包来完成。本例先以iris数据集为研究对象示范一些基本函数的用法,再介绍reshape包的强大功能。

iris数据集中有五个变量,其中Species表示鸢尾属花的子类,其它四个变量分别是花瓣和萼片的长度和宽度。你可以用head(iris)来观察原始数据的一些样本。我们的第一个任务是想计算不同种类花在四个指标上的平均值。用到的函数有tapply,by及aggregate。这篇文章对它们有所涉及。

将数据解包后,先用tapply函数尝试,但会发现该函数一次只允许输入一个变量。如果要完全四个变量的计算可能得用到循环。放弃这个函数来试试用by函数,该函数可以一次输入多个变量,但输出结果为一个list格式,还需要用do.call函数进行整合,有点麻烦。最方便友好的还是aggregate函数,直接输出为数据框格式。另外它还允许用公式来设置分组因子。

attach(iris)
names(iris)
tapply(X=Sepal.Length,INDEX=Species,FUN=mean)
temp <-by(data=iris[,1:4],INDICES=Species,FUN=mean)
do.call(rbind,temp)
aggregate(x=iris[,1:4],by=list(Species),FUN=mean)
aggregate(.~ Species, data = iris, mean)aggreagate函数表现已然不错,但还不够强大。比如说它没法直接得出表格的边际值,所以下面就请出本场的主角,即reshape包中的两员大将:melt与cast。这两个通常是配合使用,melt专门负责“融合”原始数据,形成长型(long)数据结构。cast则专职将融合后的数据“重铸”为新的形式(让人想起了“铁索连环”)。基本上只要有这两个函数,就能统一解决所有的汇总问题。

还是以上面的问题为例子,先加载reshape包,然后用melt函数进行融合数据,其中参数id指定了用Species为编号变量,measure参数用来指定分析变量(即被融合的变量),本例中只指定了参数id,所以原始数据中未包括在id中的其它变量均指定为分析变量。你可以观察到新的数据iris.melt其实就是堆叠(stack)后的数据。然后我们再用cast来重铸,cast函数中可以使用公式,波浪号左侧变量将纵列显示,右侧变量将以横行显示。margins参数设定了以列作为边际汇总方向。如果希望在计算中只包括两种花,可以使用subset参数。

library(reshape)
iris.melt <- melt(iris,id='Species')
cast(Species~variable,data=iris.melt,mean,margins="grand_row")
cast(Species~variable,data=iris.melt,mean,
subset=Species %in% c('setosa','versicolor'),
margins='grand_row')reshape包的作者也是ggplot2包的开发者,这个牛人是个完美主义者,在reshape包推出五年后,他重构代码推出了新的reshape2包。这个新包的特性在于:

  改进算法,使计算与内存使用效能增强;
  用dcast和acast代替了原来的cast函数;
  用变量名来设定边际参数;
  删除cast中的一些特性,因为他确认plyr包能更好的处理;
  所有的melt函数族都增加了处理缺失值的参数。
  下面我们以diamonds数据为例,来完成一个略为复杂的任务。我们希望计算不同切工和不同纯净度条件下,钻石的单位平均价格,并加以比较。首先加载reshape2包和ggplot2包,然后取子集。将原始数据融合,以切工、颜色和净度为编号变量。再利用dcast函数重铸数据,得到汇总结果。计算出单位价格,最后用条形图表现结果。

library(reshape2)
library(ggplot2)
data <- diamonds[1:7]
data.melt <- melt(data,id=c('cut','color','clarity'))
diam.sum <- dcast(data.melt,cut+clarity~variable,
subset=.(variable %in% c('price','carat')),mean)
diam.sum$average <- diam.sum$price/diam.sum$carat
p <- ggplot(diam.sum,aes(cut,average,fill=clarity))
p + geom_bar(position='dodge')

  除了reshape包以外,R语言中还有stack、unstack、reshape等函数能完成类似的工作,但*能的强大,还是首推reshape包中的哼哈二将。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
这是个成本会计题,马上要考这道原题了,求大虾帮忙 财务管理类问题,求大虾帮忙,小弟感激不尽。具体问题看问题补充。_百度... 光影魔术手怎么换底色 光影魔术手换底色教程 ...米的绳子围绕一棵树干饶了6圈,还余下1.16米,这棵树干上的直径大约是... ...还余下1.16米,这棵树的树干的直径大约是多少米?求算式! ibm x3500 M5 服务器 运行时风扇声音好大,吵死了,可以下掉一个吗... IBMX3500 M5,最近老是出现自动关机的情况,需要把服务器电源拔掉半分钟... 治疗萎缩性胃炎的方法 怎么治萎缩胃炎 JYF-40FS06电饭煲190块买的是假的吗 R语言long怎么转换为wide R语言数据集行列互换技巧 兼跨长江中上游和和中下游的省级行政单位分别是 A.青海、湖南;B.四川、江西;C.云南、湖北;D.湖北、江西 兼跨黄河上中游的省区是 兼跨一、二所在地势阶梯,有长江、黄河两大河流流经,且五种基本地形类型齐全的省级行政区是(  )A. 下列国家中,兼跨两洲的欧洲国家是(  ) A.俄罗斯 B.埃及 C.土耳其 D.印度尼西 什么是跨环效应? 为什么面包时间放长了会发霉 全麦面包容易发霉嘛? 为什么面包容易发霉? 软面包霉变的原因 面包为什么会发霉? 为什么有些面包很快发霉,有些可以放很久 面包为什么发霉?导致面包发霉的是什么生物? 面包放久了,为什么会长毛? 为什么面包会长毛? 面包为什么会发霉求原理,答案 boss直聘我是招人的,怎么更换城市 放宽地区大专学历能参加2020年法律职业资格考试吗? 司考放宽条件地区有什么优惠 R语言的错误:undefined columns selected? 我有两个矩阵,行名和列名一样, 用C语言求解一元二次方程的解怎么写 腿部脱毛有什么有哪些方法? 大腿脱毛的方法是什么最好? 有什么方法可以把腿上的毛脱干净呀 如何主动让自己大腿脱臼? 有什么办法能让腿毛脱落 有什么办法自然脱掉大腿上的腿毛? 怎么才能让大腿瘦下来? 怎么用手让大腿脱臼 减大腿什么方法好呢 用什么方法能让大腿瘦的快? 用什么方法可以瘦大腿? 什么方法可以瘦大腿? 怎样才让大腿变小 房贷改革有利于精准调控(人民时评) OppO手机死机了一直亮着,关不了机,用妙招给它关了机,但是它又自动开机是怎么? 为了加深利率市场化,我国应该怎么做? 理财产品预约转够期间有收益吗?