找回密码
 注册
查看: 6767|回复: 8

求助两个R程序,替换和交换

[复制链接]
发表于 2012-3-29 15:43:15 | 显示全部楼层 |阅读模式
有两套数据
       1:                               2:
                  1 a                                  a b
                  2 b                                  a c
                  3 c                                  c b
                  4 d                                  d e
将2里的字母全部换成1中字母所对应数字,如果2中的e在1中没有对应,就将这列去掉,结果是:1 2
                                                                                                                                                      1 3
                                                                                                                                                      3 2

然后在对这个结果进行处理,使每一列的第一个数字小于第二个数字。原始数据为10万多。希望哪位高人有时间写一写让我学习下。
回复

使用道具 举报

发表于 2012-3-29 22:39:49 | 显示全部楼层
本帖最后由 redcat 于 2012-3-29 22:57 编辑

file<-file("c://1.txt","r")  #打开1.txt
hash_array=new.env() #创建一个新散列
f1=readLines(file,1)   #读文件一行
while(length(f1)!=0){
  line=strsplit(f1," ")  #按空格分割每行
  assign(line[[1]][2],line[[1]][1],hash_array)  #每行,两个元素装入散列
  f1=readLines(file,n=1)   #读一行
}
close(file)
file<-file("c://2.txt","r")      #打开2.txt
outfile <- file("c://3.txt", "w")  # 创建一个3.txt准备写入文件
f2=readLines(file,1)  #读一行
while(length(f2)!=0){    #由于文件比较大,所以一行一行处理,然后一行一行写出,这样少占内存
  line=strsplit(f2," ")  #按空格分割每行
  if(exists(line[[1]][1], envir=hash_array)&&exists(line[[1]][2], envir=hash_array)){  #判断是否两个第二个文件的两列都可替换
    x1=as.numeric(mget(line[[1]][1],hash_array))  #编码替换,即2.txt中的元素按散列中的键和值关系替换
    x2=as.numeric(mget(line[[1]][2],hash_array))
    min=min(x1,x2)    #选取替换后较小的一个写到第一列
    max=max(x1,x2)  #选取替换后较大的一个写到第二列
    cat(min,file=outfile) #打印输出到3.txt
    cat(" ",file=outfile)
    cat(max,file=outfile)
    cat("\n",file=outfile)
  }
  f2=readLines(file,n=1)  
}
close(file)
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

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

使用道具 举报

发表于 2012-3-30 08:52:52 | 显示全部楼层
用不着那么复杂,如果原意FF的话,可以给你写个更高效的,
回复 支持 反对

使用道具 举报

发表于 2012-3-30 09:25:25 | 显示全部楼层
代码不会超过10行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-30 10:57:16 | 显示全部楼层
hengde_li 发表于 2012-3-30 08:52
用不着那么复杂,如果原意FF的话,可以给你写个更高效的,

嗯,那代码是挺麻烦的,由于我刚开始接触R语言,那些代码还真看不懂。您有简单一些的语句吗?“如果愿意FF” FF是什么意思啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-3-30 11:00:05 | 显示全部楼层
hengde_li 发表于 2012-3-30 09:25
代码不会超过10行

不好意思,刚刚理解了,您说的是付费吧?这个倒也不用那么麻烦,呵呵,这个问题我已经用别的方法解决了,只是想来这里问一下大家用R是怎么做的,纯粹是看看代码学习学习。
回复 支持 反对

使用道具 举报

发表于 2012-3-30 11:57:30 | 显示全部楼层
hengde_li 发表于 2012-3-30 09:25
代码不会超过10行

代码不超过10行,几十G的数据,机器跑死掉
回复 支持 反对

使用道具 举报

发表于 2012-3-30 14:46:07 | 显示全部楼层
几十G算个啥啊,估计楼主是基因型数据转换,机器不会死,LZ不用牢骚
回复 支持 反对

使用道具 举报

发表于 2012-4-1 12:32:09 | 显示全部楼层
路过,学习
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-24 14:35 , Processed in 0.031276 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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