用perl统计一个六种类型的数据

例子文件,只取了一小部分数据:get2_nr.out
ZM_BFa0062B01 bzip
ZM_BFa0063A16 bzip
ZM_BFa0063M13 myc
ZM_BFa0063N22 myc
ZM_BFa0063O17 bzip
ZM_BFa0066C13 myb
ZM_BFa0066F21 bzip
ZM_BFa0068F07 bzip
ZM_BFa0068F15 myb
ZM_BFa0068N18 myb
ZM_BFa0068P14 bzip
ZM_BFa0069B08 myb
ZM_BFa0070G13 myb
ZM_BFa0071G19 bzip
ZM_BFa0071G21 myb
ZM_BFa0072O19 bzip
ZM_BFa0073F20 myb
ZM_BFa0073F20 myc
ZM_BFa0073O09 myb
ZM_BFa0073O09 myc
ZM_BFa0078K13 dre
ZM_BFa0078M22 bzip
ZM_BFa0079N03 erf
ZM_BFa0079P04 erf
ZM_BFa0083F19 myb
ZM_BFa0086H17 myb
ZM_BFa0087C10 bzip
ZM_BFa0090M23 bzip
ZM_BFa0090M23 erf
ZM_BFa0090M23 myc
ZM_BFa0097N21 bzip
ZM_BFa0098A07 erf
ZM_BFb0001A15 bzip
ZM_BFb0001A21 abf
ZM_BFb0001A21 erf
ZM_BFb0001A22 bzip
ZM_BFb0001B09 bzip
ZM_BFb0001B09 erf
ZM_BFb0001B13 bzip

 

Rebecca给出的分析是这样子的:
第一列是基因名称,第二列是转录因子

同一个基因可能有几类转录因子的结合位点,因此,统计不同的情况

◦1. 一个基因只有一个转录因子,且这个转录因子是bzip。同理,统计,myb,myc,erf,abf,dre,6种情况
◦2. 一个基因有2个转录因子,那么就可能是6个中任意2个的组合,15种情况
◦3.一个基因上有3个转录因子,就是6个中任意三个,20种情况
◦4.一个基因上有4个转录因子,就是15种
◦5.一个基因上有5个转录因子,6种情况
如果枚举的话,貌似太多了

输出的结果是:直接的每种类型的基因个数就行了(即类型-》个数)

例子代码:temp.pl
#!/usr/bin/perl

while(<>){
 chop;
 ($id,$type) = split("/t");
 chop($type);  #要用两次chop才能把换行符去掉。奇异。。(较旧的perl版本可能得改为chomp($type);)
 $gene{$id} .= $type . "/t"; #丢给hash了
}

undef @arr;
foreach $id (sort keys %gene) {
 @type = sort(split("/t", $gene{$id})); #把type变为数组。用sort函数。避免不必要的重复
 $type = join("-",@type);
 push (@arr,$type); #再把所有的type丢进一个数组里
}

$hash{$_}++ for @arr; #从type的数组里统计重复和个数
print "$_/t$hash{$_}/n" for (keys %hash); #输出

 

的确是需要更加的代码来完成。

幸好最后还是想出了这样一个用hash来完成的办法。也算是可喜,最主要的参考还是  perl语言编程 里的一段代码。求平均值的。也有着类似的求解过程

本文详细出处参考:http://liucheng.name/1286/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值