in reply to
Consolidating biological data into occurance of each biological unit per sample in table
Hi ejohnston7,
Hash to the rescue... Using the data given by the OP. One can do like so:
use warnings;
use strict;
my %analyse;
while (<DATA>) {
chomp;
if ( my ( $animal_type, $animal_name, $animal_color ) =
m/.+?([A-Z]).+?__(.+?);.+?__(.+?)?$/ )
{
$analyse{$animal_name}{$animal_type}++;
$analyse{$animal_color}{$animal_name}{$animal_type}++
if defined $animal_color;
}
}
use Data::Dump;
dd \%analyse;
__DATA__
occurence1 A a__bear;c__black
occurence2 B a__wolf;c__grey
occurence3 A a__wolf;c__white
occurence4 A a__bear;c__
occurence5 C a__wolf;c__grey
occurence6 C a__bear;c__brown
occurence7 A a__wolf;c__
occurence8 B a__wolf;c__
occurence9 C a__bear;c__black
occurence10 C a__wolf;c__
occurence11 A a__wolf;c__red
occurence12 B a__wolf;c__grey
occurence13 C a__wolf;c__grey
occurence14 C a__wolf;c__grey
occurence15 B a__bear;c__brown
occurence16 C a__bear;c__brown
occurence17 A a__bear;c__
occurence18 A a__bear;c__brown
occurence19 C a__wolf;c__white
occurence20 B a__wolf;c__grey
occurence21 B a__bear;c__
occurence22 B a__wolf;c__grey
occurence23 A a__wolf;c__grey
occurence24 A a__bear;c__brown
occurence25 C a__bear;c__brown
occurence26 A a__bear;c__brown
occurence27 C a__bear;c__
occurence28 C a__bear;c__brown
occurence29 B a__wolf;c__red
occurence30 B a__wolf;c__grey
The output shows the two tables together. The desired output is left for the OP to make happen.
Output from the code above:
{
bear => { A => 6, B => 2, C => 6 },
black => { bear => { A => 1, C => 1 } },
brown => { bear => { A => 3, B => 1, C => 4 } },
grey => { wolf => { A => 1, B => 5, C => 3 } },
red => { wolf => { A => 1, B => 1 } },
white => { wolf => { A => 1, C => 1 } },
wolf => { A => 4, B => 7, C => 5 },
}
Update:
And if you just care about just getting the color, with the frequency of type, then you can change this:
$analyse{$animal_color}{$animal_name}{$animal_type}++
if defined $animal_color;
to this
$analyse{$animal_color}{$animal_type}++
if defined $animal_color;
then your output would be:
{
bear => { A => 6, B => 2, C => 6 },
black => { A => 1, C => 1 },
brown => { A => 3, B => 1, C => 4 },
grey => { A => 1, B => 5, C => 3 },
red => { A => 1, B => 1 },
white => { A => 1, C => 1 },
wolf => { A => 4, B => 7, C => 5 },
}
If you tell me, I'll forget.
If you show me, I'll remember.
if you involve me, I'll understand.
--- Author
unknown to me