R实现大文本文件数据分组汇总的方法.pdfVIP

R实现大文本文件数据分组汇总的方法.pdf

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

R 实现大文本文件数据分组汇总的方法 使用R 语言对文件数据分组汇总是很普遍的操作,但有时我们会遇到比较大的文件,这 类文件的计算结果较小,但源数据太大,无法全部放入内存进行计算,只能采用分批读取、 分批计算、拼合结果的办法来解决。下面用一个例子来说明R 实现大文件数据分组汇总的方 法。 有个1G 的文件sales.txt ,存储着大量订单记录,我们要对CLIENT 字段分组并对AMOUNT 字段汇总。该文件的列分割符为“\t ”,前几行数据如下: ORDERID CLIENT SELLERID AMOUNT ORDERDATE 1 WVF Vip 5 440.0 2009-02-03 2 UFS Com 13 1863.4 2009-07-05 3 SWFR 2 1813.0 2009-07-08 4 JFS Pep 27 670.8 2009-07-08 5 DSG 15 3730.0 2009-07-09 6 JFE 10 1444.8 2009-07-10 7 OLF 16 625.2 2009-07-11 R 语言解决方案 1 con - file(E: \\ sales.txt, r) 2 result=read.table(con,nrows=100000,sep=\t,header=TRUE) 3 result-aggregate(result[,4],list(result[,2]),sum) while(nrow(databatch-read.table(con,header=FALSE,nrows=100000,sep=\t,col.names=c( 4 ORDERID,Group.1,SELLERID,x,ORDERDATE)))!=0) { 5 databatch-databatch[,c(2,4)] 6 result-rbind(result,databatch) 7 result-aggregate(result[,2],list(result[,1]),sum) 8 } 9 close(con) 部分计算结果 Group.1 x 1 ARO 2 BDR 3 BON 4 BSF 287908788 5 CHO 代码解读: 1 行:打开文件句柄。 2-3 行:读入第一批的十万条数据,分组汇总后存入result 。 4-8 行:循环读数。每批次读入十万行数据,存入 databatch 变量。然后取第2 和第4 个字 段,即“CLIENT ”和“AMOUNT ”。接着将databatch 拼合到result 中,再执行分组运算。 可以看到,同一时刻只有databatch 和result 会占用内存,其中databatch 有十万条记录, result 是汇总结果,而汇总结果通常较小,不会超出内存。 11 行:关闭文件句柄。 注意事项: 关于数据框。R 语言的数据框不直接支持大文件,因此要用循环语句来辅助解决。具体 的算法是:读一批数据,拼合到数据框result,对result 分组汇总,再读下一批数据。可以 看到,循环语句这部分的代码略显复杂。 关于列名。由于第一行数据是列名,因此第一批数据可以用header=TRUE 直接设置列名, 但后续数据没有列名,所以要用header=FALSE 来读数。使用header=FALSE 时,默认的列名 是V1 、V2…,而分组汇总后的默认列名是Group.1、x ,因此还要用col.names 来改名,这样 才能使两者结构一致,方便后续的合并。列名这部分很容易出错,值得注意。 替代方案: 同样的算法也可以用Python、集算器、Perl 等语言来实现。和R 语言一样,这几种语言 都可以实现大文本文件的分组汇总,以及后续的结构化数据计算。下面简单介绍集算器和 Python 的解决方案。 集算器会自动分批处理数据,程序员无需用循环语句手工控制,因此代码非常简洁: A 1 =file(e:/sales.txt).cursor@t() 2

文档评论(0)

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

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

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档