尋找具有最大寬度的區域我有具有以下結構的Perl:從列表
gene transcript exon length
A NM_1 1 10
A NM_1 2 5
A NM_1 3 20
A NM_2 1 10
A NM_2 2 5
A NM_2 3 50
B NM_5 1 10
... ... ... ...
所以基本上,該表包括與所有人類基因列的表。第二列包含抄本名稱。同一個基因可以有多個轉錄本。第三列包含一個外顯子編號。每個基因由多個外顯子組成。第四列包含每個外顯子的長度。
現在我想創建一個新的表看起來像這樣:
gene transcript length
A NM_2 65
B NM_5 10
... ... ...
所以我基本上想要做的就是找到每個基因的轉錄時間最長。 這意味着當每個基因(列基因)有多個轉錄本(列轉錄本)時,我需要對該基因轉錄本的所有外顯子的長度列中的值進行求和。
所以在這個例子中有兩個基因A的轉錄本:NM_1和NM_2。每個都有三個外顯子。 NM_1 = 10 + 5 + 20 = 35這三個值的總和,NM_2是10 + 5 + 50 = 65。因此對於基因A,NM_2是最長的轉錄本,所以我想把它放在新表格中。對於基因B,只有一個轉錄本,一個長度爲10的外顯子。因此,在新表格中,我只想報告這個轉錄本的長度。
我和哈希工作過,所以我想存儲「基因」和「成績單」是兩個不同的密鑰:
#! /usr/bin/perl
use strict;
use warnings;
open(my $test,'<',"test.txt") || die ("Could not open file $!");
open(my $output, '+>', "output.txt") || die ("Can't write new file: $!");
# skip the header of $test # I know how to do this
my %hash =();
while(<$test>){
chomp;
my @cols = split(/\t/);
my $keyfield = $cols[0]; #gene name
my $keyfield2 = $cols[1]; # transcript name
push @{ $hash{$keyfield} }, $keyfield2;
...
作爲預提示其聲明 - 如果您嘗試自己解決問題,您會得到更好的迴應。我會建議先看看哈希。 – Sobrique
我已經使用過散列,但不像這樣複雜。上述我的建議是否有效? – user1987607
您的輸出「長度」字段是長度的總和嗎?它看起來像。 – Sobrique