R实现分组汇总的几种办法

R实现分组汇总的几种办法

ID:38287480

大小:280.28 KB

页数:4页

时间:2019-06-03

R实现分组汇总的几种办法_第1页
R实现分组汇总的几种办法_第2页
R实现分组汇总的几种办法_第3页
R实现分组汇总的几种办法_第4页
资源描述:

《R实现分组汇总的几种办法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、R实现分组汇总的几种办法分组汇总是对二维结构化数据中的某个字段(或多个字段)分组,并对组内字段进行汇总的算法,下面的例子将展示R语言实现分组汇总的几种办法。为了更加通用,例子中的分组字段是2个,汇总算法也是2种。案例描述:请将数据框orders按照CLIENT和SELLERID分组,并在组内对AMOUNT字段分别求和、求最大值。说明:orders存储着订单记录,其来源可以是数据库也可以是文件,比如:orders<-read.table("sales.txt",sep="t",header=TRUE)。其前几行数据如下:ORDERIDCL

2、IENTSELLERIDAMOUNTORDERDATE11WVFVip5440.02009-02-0322UFSCom131863.42009-07-0533SWFR21813.02009-07-0844JFSPep27670.82009-07-0855DSG153730.02009-07-09方法1:aggregate函数代码:result1<-aggregate(orders$AMOUNT,orders[,c("SELLERID","CLIENT")],sum)result2<-aggregate(orders$AMOUNT,orde

3、rs[,c("SELLERID","CLIENT")],max)result<-cbind(result1,result2$x)部分计算结果:SELLERIDCLIENTxresult2$x8716OLF780.6625.28819OLF144.8144.88924OLF1191.21191.2905PAER1414.81414.8916PAER2545.22545.2代码解读:1.从名字就可以看出,aggregate是专用于分组汇总的函数,它的输入参数和计算结果都是数据框,用法相对简单。2.aggregate函数不能对分组后的数据进行多

4、种汇总计算,因此要用两句代码分别实现sum和max算法,最后再用cbind拼合。显然,上述代码在性能和易用性上存在不足。3.aggregate函数对分组字段的顺序有一个奇怪的要求:必须反向排列。鉴于这个怪要求,先对CLIENT分组再对SELLERID分组就必须写成:orders[,c("SELLERID","CLIENT")]。如果按照正常的思维习惯写代码,结果将是错误的。4.不仅代码的写法违反正常的思维习惯,计算后的结果也很怪异:SELLERID字段会排在CLIENT之前。事实上,为了使计算结果更符合业务逻辑,上述的代码还要继续加工才行

5、。总结:aggregate函数勉强可用,但在性能和方便性上存在不足,代码的写法、计算结果、业务逻辑这三者不一致。方法2:split+lapply函数代码:sp<-split(orders,orders[,c("SELLERID","CLIENT")],drop=TRUE)result1<-lapply(sp,FUN=function(x)sum(x$AMOUNT))result2<-lapply(sp,FUN=function(x)max(x$AMOUNT))result<-cbind(result1,result2)部分计算结果resu

6、lt1result216.OLF780.6625.219.OLF144.8144.824.OLF1191.21191.25.PAER1414.81414.86.PAER2545.22545.2代码解读:1.Split函数的作用是将数据框按照指定字段分组,但不做后续计算。lapply函数可以对每组数据都执行同样的算法。Split和lapply两者结合可以实现本案例。2.由于分组后的数据可以复用,因此本算法比aggregate性能更高。3.Lapply函数也不支持多种统计方法,因此也要用两句代码分别实现sum和max算法,最后再用cbind拼

7、合。另外,本算法还要额外用到split函数,因此在易用性上没有改进,反而是更差了。4.分组顺序仍然要违反正常的思维习惯,必须反写成:orders[,c("SELLERID","CLIENT")]。5.计算结果需要大幅加工,很不方便。可以看到,计算结果中的第一列实际上是“SELLERID.CLIENT”,我们需要把它拆分成两列并调换顺序才行。总结:本算法在性能上有所提高,但在易用性上明显不足,在代码写法、业务逻辑、计算结果上仍然存在不一致。Lapply是apply函数族的一份子,类似的函数还有sapply和tapply。其中sapply的用

8、法和lapply的区别只在参数上,如下:sp<-split(orders,orders[,c("SELLERID","CLIENT")],drop=TRUE)result1<-sapply(s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。