免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2480 | 回复: 3
打印 上一主题 下一主题

求大神~有程序不会写。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-19 15:41 |只看该作者 |倒序浏览
5条序列
1、CTATATAT
2、CTATATAT
3、ATATATAT
4、ATATATAT
ck、ATATATAT
第一个位点有2个C,3个A,那么第一个位点突变率是50%(除去CK)。
那么问题来了,现有80个长度为300k的序列,我想把每一个位点的突变率求出来,并排序。应该怎么写?
求大神!

论坛徽章:
0
2 [报告]
发表于 2015-01-19 15:43 |只看该作者
序列中有gaps,N

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
3 [报告]
发表于 2015-01-19 22:44 |只看该作者
回复 1# G比蒙
  1. #!/usr/bin/perl -w

  2. my (%h,%ck);
  3. while(<DATA>){
  4.         chomp;
  5.         my($kn, $seq) = (split /、/);
  6.         my @all = (split //,$seq);
  7.         if($kn eq 'ck'){
  8.                 map{$ck{$_}=$all[$_]}(0..$#all);
  9.         }else{
  10.                 map{push @{$h{$_}},$all[$_] unless $all[$_] eq 'N';}(0..$#all);
  11.         }
  12. }

  13. foreach my $i (sort keys %h){
  14.         my $num = grep/$ck{$i}/i,@{$h{$i}};
  15.         my $ratio = get_ratio($num, @{$h{$i}});
  16.         print "$i\t$ck{$i}\t$num\t$ratio\n";
  17. }

  18. sub get_ratio(){
  19.         my($num, @all) = @_;
  20.         my $a = scalar @all;
  21.         sprintf( "%.2f", 1 - $num/$a ) * 100 . '%';
  22. }
  23. __DATA__
  24. 1、CTATATAT
  25. 2、CTATGTAT
  26. 3、ATATNTAT
  27. 4、ATATATAT
  28. ck、ATATATAT
复制代码

论坛徽章:
0
4 [报告]
发表于 2015-01-20 15:17 |只看该作者
谢谢大神!!


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

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP