例子文件,只取了一小部分数据: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/