如何使用reshape包进行数据汇总
在数据分析过程中,利用各种图表进行数据探索是必要的前期工作。描述性统计中就包括了直方图、散点图等工具来探索连续数据,对于分类数据,则可以采用条形图、交叉分组表等工具。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包中的哼哈二将。
reshape是怎样用的
reshape
[英][ri:’ep] [美][riep]
vt.重塑; 给…以新形态; 采取新形式; 打开新局面;
第三人称单数:reshapes
过去分词:reshaped
现在进行时:reshaping
过去式:reshaped
If he does, he can reshape the agenda. 而如果他做到了,他就可以重塑议程。
matlab中的reshape命令
matlab中reshape命令是把指定的矩阵改变形状,但是元素个数不变。
例如,行向量:
a = [1 2 3 4 5 6]
执行下面语句把它变成3行2列:
b = reshape(a,3,2)
执行结果:
b =
1 4
2 5
3 6
若a=[1 2 3
4 5 6
7 8 9]
使用reshpe后想得到b=[1 2 3 4 5 6 7 8 9]
只需要将a 转置一下就可以了(因为matlab是按列读取的,他会按你分多少行就按列读取多少个数,并不是随机的):
b=reshape(a’,1,9)
reshape的意思
reshape
[5ri:5Feip]
vt.
改造; 重新整形[修整]; 再压; 重订(新方针)
The world situation is gradually reshaping itself.
世界形势在慢慢地转变着。
函数 reshape 的用法
1、B = reshape(A,m,n)
返回一个m*n的矩阵B, B中元素是按列从A中得到的。如果A中元素个数没有m*n个, 则会引发错误。
2、B = reshape(A,m,n,p,…)和B = reshape(A,[m n p …])
返回一个和A具有相同元素的N(不是上面的参数n)维数组。但B的尺寸是m*n*p*…,m*n*p*必须和prod(size(A))相等。即A和B元素个数相等。
3、B = reshape(A,…,[ ],…)
计算由占位符[ ]所表示的尺寸的长度,这样维度的乘积等价于prod(size(A))。而prod(size(A))的值必须能被指定维数的乘积所整除。在这里面占位符[ ] 只能使用一次。
扩展资料
reshape函数作为MATLAB中将指定的矩阵变换成特定维数矩阵一种函数,且矩阵中元素个数不变,函数可以重新调整矩阵的行数、列数、维数。函数语法为B = reshape(A,size)代表返回一个和A元素相同的n维数组,但是由向量size来决定重构数组维数的大小。
repmat函数与reshape函数功能比较:repmat函数主要是用于快速产生一个矩阵,它的用法一般有下面几种:B = repmat(A,M,N)矩阵B是矩阵A的复制品,其中B的维度为[size(A,1)*M,size(A,2)*N]。
参考资料来源:百度百科-reshape
matlab中的reshape命令有什么数学意义
reshape就是把指定的矩阵改变形状,但是元素个数不变,
例如,行向量:
a = [1 2 3 4 5 6]
执行下面语句把它变成3行2列:
b = reshape(a,3,2)
执行结果:
b =
1 4
2 5
3 6
扩展资料:
调用格式说明
B = reshape(A,m,n)
返回一个m*n的矩阵B, B中元素是按列从A中得到的,如果A中元素个数没有m*n个, 则会引发错误。
B = reshape(A,m,n,p,…)和B = reshape(A,[m n p …])
返回一个和A具有相同元素的N(不是上面的参数n)维数组,但B的尺寸是m*n*p*…,m*n*p*…必须和prod(size(A))相等,即A和B元素个数相等。
参考资料来源:百度百科-reshape
reshape 函数怎样用
reshape 函数就是变换成特定维数的矩阵。语法是 A = reshape(A,m,n); 或者 A = reshape(A,[m,n])。都是将A 的行列排列成m行n列。
用法举例说明如下:
A =【1 4 7 10,2 5 8 11,3 6 9 12】
B = reshape(A,2,6)
B =【1 3 5 7 9 11,2 4 6 8 10 12】
B = reshape(A,2,)
B =【1 3 5 7 9 11,2 4 6 8 10 12】
reshape是一种函数,函数可以重新调整矩阵的行数、列数、维数。在matlab命令窗口中键入doc reshape或help reshape即可获得该函数的帮助信息。
B = reshape(A,size)是指返回一个和A元素相同的n维数组,但是由向量size来决定重构数组维数的大小,prod(size(B))的数量值必须和prod(size(A))的保持一致。
扩展资料:
调用格式
B = reshape(A,m,n)
B = reshape(A,m,n,p,…)
B = reshape(A,[m n p …])
B = reshape(A,…,[ ],…)
B = reshape(A,size)
调用格式说明
B = reshape(A,m,n)
返回一个m*n的矩阵B, B中元素是按列从A中得到的。如果A中元素个数没有m*n个, 则会引发错误。
B = reshape(A,m,n,p,…)和B = reshape(A,[m n p …])
返回一个和A具有相同元素的N(不是上面的参数n)维数组。但B的尺寸是m*n*p*…,m*n*p*…必须和prod(size(A))相等。即A和B元素个数相等。
B = reshape(A,…,[ ],…)
计算由占位符[ ]所表示的尺寸的长度,这样维度的乘积等价于prod(size(A))。而prod(size(A))的值必须能被指定维数的乘积所整除。在这里面占位符[ ] 只能使用一次。
相关函数: shiftdim, squeeze, circshift, permute, repmat
参考资料:百度百科——reshape
reshape函数怎么用
是不是问 OpenGL / GLUT 方面的问题?
GLUT里 glutReshapeFunc(reshape); 定义 当窗的形状改变事件发生时 调用的处理函数 reshape。
shape 是形状。reshape 是当形状改变时,做些什么来修正窗内的图形显示。
这由程序员自己决定,例如,你可以考虑图形长宽尺度按窗的长宽变化,按比例缩放。你也可以考虑图形长宽尺度不变,….
下面是一个例子:
void reshape(int cur_w, int cur_h)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
if (cur_h 《= 0) cur_h = 10; // 窗太小时处理
glViewport(0,0, cur_w, cur_h);
xfactor = (float) glutGet( GLUT_WINDOW_WIDTH ) / (float) img_width; // 按比例缩放
yfactor = (float) glutGet( GLUT_WINDOW_HEIGHT ) / (float) img_height; // 按比例缩放
glutPostRedisplay(); // 发送更新消息
}
stata 中的 reshape命令怎么用
这个命令用来对长型(long)数据和宽型(wide)数据相互转换,下面这个图很好地说明了这个命令的用法:
上图中,i 代表个案的编号,j代表i的第j项数据的编号。左边表示,第i个个案的数据中,j有两个编号与之对应。比如,我们可以想像成两个省第1年有gdp,第二年也有gdp,用i来区分省份名称,如i代表四川,2代表云南。而j则用来区分年份。例如j为1时,代表2000年的gdp,为2时代表2001年的GDP等。这样,这两个表的意义就明确了。下面的命令就是reshape的用法了。
reshape wide stub, i(i) j(j)(从长到宽)
reshape long stub, i(i) j(j)(从宽到长)
这是基本用法。先把这个用会吧,后面的自己就容易理解了。
例:
webuse reshape1
list
reshape long inc ue, i(id) j(year)
list, sepby(id)
reshape wide
或:
reshape wide inc ue, i(id) j(year)