次のファイルがあります(希少行列)。
PC.354 OTU1 6
PC.354 OTU2 1
PC.356 OTU0 4
PC.356 OTU2 7
PC.356 OTU3 3
私は次のような出力が必要です(密度マトリックス - クラシック.biomテーブル)。
OTU_ID PC.354 PC.355 PC.356
OTU0 0 0 4
OTU1 6 0 0
OTU2 1 0 7
OTU3 0 0 3
awk/perl/sedを使ってこれを行うにはどうすればよいですか?私はRパッケージ(xtabs / tidyr)に関する同様の質問を見つけましたが、慣れていません。
ベストアンサー1
パールでは:
#!/usr/bin/perl
my (%hotu, %hpc)=();
while(<>){
my($pc,$otu,$v)=split;
$hpc{$pc}=1;
($hotu{$otu} or $hotu{$otu}={})->{$pc}+=$v;
}
#headers
my @apc = sort keys %hpc;
print join ("\t", 'OTU_ID', @apc) . "\n";
#values
foreach my $otu (sort keys %hotu) {
print join ("\t", $otu, map {$_=0 unless defined; $_} @{$hotu{$otu}}{@apc}) . "\n";
}