我有这样的数据
pop A B C D E
P1 T/T C/C C/C T/T C/C
P2 A/A G/G C/C T/T C/C
1 A/A G/G C/C T/T C/C
2 A/A G/G C/C T/T C/C
3 A/T A/C A/G A/T A/C
4 T/A T/G T/C T/A T/G
5 G/A G/T G/C G/A G/T
6 C/A C/T C/G C/A C/T
pop A B C D E
P1 T/T C/C C/C T/T C/C
P2 A/A G/G C/C T/T C/C
1 A/A G/G C/C T/T C/C
2 A/A G/G C/C T/T C/C
3 A/T A/C A/G A/T A/C
4 T/A T/G T/C T/A T/G
5 G/A G/T G/C G/A G/T
6 C/A C/T C/G C/A C/T
我想在我的数据上做下面的事情
我想将所有A/A
转换为A
,将T/T
转换为T
,将C/C
转换为C
,{{1 } {} {}} {}} {}} {}} {}} {}} {}} {}} {}} {}} {} 1}},G/G
到G
现在,我想通过将Z/Z
与-
进行比较来了解从-/-
到-
的状态,如果A/T
则来自{{1} }} G/T
是单字或C/G
或T/C
中的任何一个包含H
或A
,然后从E
到P1
的状态}从P2
到P1=P2
的其他状态是poly
如果A
列中的1匹配,我想将E
列中的1与P1
与P2
的广告列中的Z/Z
匹配到-/-
列中的A
并且其状态仅为多边形,然后我想提供1,否则,如果它是单声道,我不想做任何事情。
现在我将计算E
和A
的
最后,我将使用此公式E
计算pop
。
我想对第二组父母P2
和A
期待的将是这样的
E
现在我成功到第一步但不知道如何继续前进,这是我试过的代码
pop
答案 0 :(得分:1)
这会替换并创建前两行。我不明白规范的其余部分(第7行来自哪里?)
#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };
use Data::Dumper;
*ARGV = *DATA{IO} unless @ARGV;
my (@parents, @rows);
sub {
my $header = <>;
push @parents, map [ split ' ', <> ], 1, 2;
push @rows, map [ split ' ', <> ], 1 .. 6;
}->() for 1, 2;
for (map @$_, @parents, @rows) {
s= ([ACTG]) / \1 =$1=x;
s= ([-Z]) / \1 =-=x;
s= . / . =H=x;
}
say join "\t", 'pop', ('A' .. 'E') x 2;
print 'P1';
for my $parent (0, 1) {
print join "\t", q(), map {
my $p1 = $parents[ $parent * 2 ][$_];
my $p2 = $parents[ 1 + $parent * 2 ][$_];
($p1 eq $p2 or '-' eq $p1 or '-' eq $p2) ? 'mono' : 'poly';
} 1 .. 5;
}
print "\n";
__DATA__
pop A B C D E
P1 T/T C/C C/C T/T C/C
P2 A/A G/G C/C T/T C/C
1 A/A G/G C/C T/T C/C
2 A/A G/G C/C T/T C/C
3 A/T A/C A/G A/T A/C
4 T/A T/G T/C T/A T/G
5 G/A G/T G/C G/A G/T
6 C/A C/T C/G C/A C/T
pop A B C D E
P1 T/T C/C C/C T/T C/C
P2 A/A G/G C/C T/T C/C
1 A/A G/G C/C T/T C/C
2 A/A G/G C/C T/T C/C
3 A/T A/C A/G A/T A/C
4 T/A T/G T/C T/A T/G
5 G/A G/T G/C G/A G/T
6 C/A C/T C/G C/A C/T