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

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)

zhangchao11 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档