找回密码
 立即注册
查看: 2524|回复: 0

R语言处理大数据,按行读写处理代码

[复制链接]
发表于 2013-2-28 14:34:04 | 显示全部楼层 |阅读模式
本帖最后由 biostat 于 2013-2-28 14:36 编辑

#题目:将文件1中的编码,替换文件2(大于10万行)中的编码,替换后小的放在前面,大的放在后面,输出
  1. file<-file("c://1.txt","r")  #打开1.txt
  2. hash_array=new.env() #创建一个新散列
  3. f1=readLines(file,1)   #读文件一行
  4. while(length(f1)!=0){
  5.   line=strsplit(f1," ")  #按空格分割每行
  6.   assign(line[[1]][2],line[[1]][1],hash_array)  #每行,两个元素装入散列
  7.   f1=readLines(file,n=1)   #读一行
  8. }
  9. close(file)

  10. file<-file("c://2.txt","r")      #打开2.txt
  11. outfile <- file("c://3.txt", "w")  # 创建一个3.txt准备写入文件
  12. f2=readLines(file,1)  #读一行
  13. while(length(f2)!=0){    #由于文件比较大,所以一行一行处理,然后一行一行写出,这样少占内存
  14.   line=strsplit(f2," ")  #按空格分割每行
  15.   if(exists(line[[1]][1], envir=hash_array)&&exists(line[[1]][2], envir=hash_array)){  #判断是否两个第二个文件的两列都可替换
  16.    
  17.     x1=as.numeric(mget(line[[1]][1],hash_array))  #编码替换,即2.txt中的元素按散列中的键和值关系替换
  18.     x2=as.numeric(mget(line[[1]][2],hash_array))
  19.     min=min(x1,x2)    #选取替换后较小的一个写到第一列
  20.     max=max(x1,x2)  #选取替换后较大的一个写到第二列
  21.     cat(min,file=outfile) #打印输出到3.txt
  22.     cat(" ",file=outfile)
  23.     cat(max,file=outfile)
  24.     cat("\n",file=outfile)
  25.   }
  26.   f2=readLines(file,n=1)  
  27. }
  28. close(file)
  29. close(outfile)

复制代码
~~~~~~~~~~~~~~~~~~~~~
附注:
1.txt为:
1 a
2 b
3 c
4 d

2.txt为:
a b
a c
c b
d e

输出结果:
3.txt:
1 2
1 3
2 3

由于文件比较大,所以一行一行处理,然后一行一行写出,这样少占内存
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-25 07:55 , Processed in 0.026981 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表