- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
R实现分组汇总的几种办法.pdf
R 实现分组汇总的几种办法
分组汇总是对二维结构化数据中的某个字段(或多个字段)分组,并对组内字段进行汇
总的算法,下面的例子将展示R 语言实现分组汇总的几种办法。为了更加通用,例子中的分
组字段是2 个,汇总算法也是2 种。
案例描述:
请将数据框orders 按照CLIENT 和SELLERID 分组,并在组内对AMOUNT 字段分别求和、
求最大值。
说明:orders 存储着订单记录,其来源可以是数据库也可以是文件,比如:
orders-read.table(sales.txt,sep=\t, header=TRUE) 。其前几行数据如下:
ORDERID CLIENT SELLERID AMOUNT ORDERDATE
1 1 WVF Vip 5 440.0 2009-02-03
2 2 UFS Com 13 1863.4 2009-07-05
3 3 SWFR 2 1813.0 2009-07-08
4 4 JFS Pep 27 670.8 2009-07-08
5 5 DSG 15 3730.0 2009-07-09
方法 1:aggregate 函数
代码:
result1-aggregate(orders$AMOUNT, orders[,c(SELLERID,CLIENT)],sum)
result2-aggregate(orders$AMOUNT, orders[,c(SELLERID,CLIENT)],max)
result-cbind(result1,result2$x)
部分计算结果:
SELLERID CLIENT x result2$x
87 16 OLF 780.6 625.2
88 19 OLF 144.8 144.8
89 24 OLF 1191.2 1191.2
90 5 PAER 1414.8 1414.8
91 6 PAER 2545.2 2545.2
代码解读:
1. 从名字就可以看出,aggregate 是专用于分组汇总的函数,它的输入参数和计算结果都
是数据框,用法相对简单。
2. aggregate 函数不能对分组后的数据进行多种汇总计算,因此要用两句代码分别实现sum
和max 算法,最后再用cbind 拼合。显然,上述代码在性能和易用性上存在不足。
3. aggregate 函数对分组字段的顺序有一个奇怪的要求:必须反向排列。鉴于这个怪要求,
先对CLIENT 分组再对SELLERID 分组就必须写成:orders[,c(SELLERID,CLIENT)] 。如果
按照正常的思维习惯写代码,结果将是错误的。
4. 不仅代码的写法违反正常的思维习惯,计算后的结果也很怪异:SELLERID 字段会排在
CLIENT 之前。事实上,为了使计算结果更符合业务逻辑,上述的代码还要继续加工才
行。
总结:
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)
部分计算结果
result1 result2
16.OLF 780.6 6
文档评论(0)