如何用r实现excel透视表功能

Python015

如何用r实现excel透视表功能,第1张

Excel数据透视表是一种数据汇总手段,如果表格内的数据太多,单靠肉眼是很难准确分辨数据的,而使用数据透视表,就可以很方便的筛选各种数据。可以用在记录数量众多、以流水帐形式记录、结构复杂的工作表。

用R实现数据的透视功能可以使用reshape2包中的melt()函数和dcast()函数,具体操作如下。

1、首先我们需要准备好一个需要做成透视功能表的数据集,如下数据集b。

2、假设希望统计以V1分组,每一组的V4变量各指标的计数,在Excel的透视表里我们需要这样做,如下图列为v4。

3、行标签为v1得到值1,2,3,数字项是列v4中的数值,excel表格中用拖拽行列的方式透视数据这里用赋值。

4、而在R中要达到同样效果需要输出Data.frame格式,dcast函数需要载入reshape2包,如下图1-3行代码,下图4-5行为透视后数据效果。

参考资料来源:百度百科-数据透视表

最好先把data里的数据从char转成numeric,不带引号。

然后先弄个目标矩阵,每个位置暂时预设成0

>final<-matrix(0,12,19) #12行 19列

写个循环:

>for(i in 1:nrow(data)){ # nrow是看你的data里有多少行

>final[data[i,1],data[i,2]]<-data[i,3]#final的x坐标是data的第一列,y坐标是第二列

>}

>final<-rbind(final,colSums(final)) #最后一行是总计

>rownames(final)<- 。。。 #自己起名字

>colnames(final)<- 。。。

merge函数通过by选择合并某列的相同值。

这个包处理数据与excel包中的透视表有些类似

reshape包包含融合(melt)和重铸(cast),melt函数是将宽数据变为长数据,而cast则是将长数据变为宽数据。

melt函数就是将很宽的表融合成一列,变成很长的表,之后设定id.var=month和day就是固定搜索宽表中带有月日的列。这里我们使用airquality内置数据集作为示例。

因为初始数据集有六列数据。

但是melt函数只将前四列进行了数据融合,我这里猜测是无论什么数据集,他默认会将后两列作为ID,并且我们不用id.vars指明就不会显示。所以我们需要指明melt函数前四列作为变量值,后两列month和day作为ID。

图3和图1可以对照参考

cast函数分为dcast函数和acast函数,dcast函数用于重铸数据框,而acast函数用于重铸向量,矩阵或者数组。

指定重铸格式

这里按月份指定重铸,不知道应该对每月的数据进行何种处理则会报错。所以我们通过fun.aggregate参数指定计算函数,na.rm=T则用来计算时去除缺失值