This seemed like a interesting mental exercise. Here's my take:
#!/usr/bin/env perl use 5.010; use strict; use warnings; my (%incl, %excl); while (<DATA>) { my ($id, $loc_list) = split; my @locs = split /,/ => $loc_list; @{$incl{$id}}{@locs} = (1) x @locs; } for my $in (keys %incl) { for my $ex (keys %incl) { $excl{$in}{$ex} = [ grep { ! $incl{$ex}{$_} } keys %{$incl{$in +}} ]; } } say join qq{\t} => q{ID}, sort(keys %incl); for my $id (sort keys %incl) { say join qq{\t} => $id, map { scalar @{$excl{$id}{$_}} } sort keys + %incl; } __DATA__ Name1 USA,Canada,Yemen Name2 Canada,Portugal,India Name3 China,HongKong,Canada Name4 London,Amsterdam,Ireland,USA Name5 India,USA,Canada
Output:
ID Name1 Name2 Name3 Name4 Name5 Name1 0 2 2 2 1 Name2 2 0 2 3 1 Name3 2 2 0 3 2 Name4 3 4 4 0 3 Name5 1 1 2 2 0
-- Ken
In reply to Re: Doing pair-exclusivity analysis and building a matrix
by kcott
in thread Doing pair-exclusivity analysis and building a matrix
by angerusso
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |