in reply to Counting hash values
Update: Just to clarify, the answer I give below assumes that you're interested in a general solution, not just the case where "213119_at" is the only value of interest, as other posts seem to assume from the literal sample you gave. I base this on the comment at the end of your post:
"I would then choose ENSG00000123643 to store in another hash with 213119_at, e.g. 213119_at{ENSG00000123643}.
Storing it in a hash makes me think that you're wanting to do this for all other similar values as well.
Original:
While, I'm sure this could be golfed, my thought is just to build it up in the stages you describe. (Note, I changed some numbers to get two answers in the final hash.)
use strict; use warnings; use Data::Dump::Streamer; my %original = split " ", do { local $/; <DATA> }; my %count; while ( my( $k, $v ) = each %original ) { $k =~ s/\A[^:]+:[^:]+:([^:]+).*/$1/; $count{$k}{$v}++; } my %summary; while ( my ($k, $v ) = each %count ) { my $max = [ sort { $v->{$b} <=> $v->{$a} } keys %$v]->[0]; $summary{$k} = $max; } Dump \%summary; __DATA__ Affy:HG_U133A:213119_at:74:303; ENSG00000123643 Affy:HG_U133A:213119_at:542:439; ENSG00000123643 Affy:HG_U133A:213119_at:658:369; ENSG00000123643 Affy:HG_U133A:213119_at:199:255; ENSG00000123643 Affy:HG_U133A:213119_at:436:453; ENSG00000123643 Affy:HG_U133A:213119_at:324:381; ENSG00000458158 Affy:HG_U133A:213118_at:584:557; ENSG00000123623 Affy:HG_U133A:213118_at:234:507; ENSG00000123623 Affy:HG_U133A:213118_at:482:429; ENSG00000123623 Affy:HG_U133A:213118_at:608:451; ENSG00000458158 Affy:HG_U133A:213118_at:356:297; ENSG00000123623
Prints
$HASH1 = { "213118_at" => 'ENSG00000123623', "213119_at" => 'ENSG00000123643' };
-xdg
Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Counting hash values
by MonkPaul (Friar) on May 26, 2006 at 14:17 UTC | |
by xdg (Monsignor) on May 26, 2006 at 16:50 UTC |