首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从冗余列表创建矩阵

从冗余列表创建矩阵
EN

Stack Overflow用户
提问于 2017-04-06 12:22:52
回答 1查看 43关注 0票数 1

我有一个包含冗余列表的输入,如下所示:

代码语言:javascript
复制
Sample1.14  Water
Sample2.45  Air
Sample1.16  Dirt
Sample1.14  Water
Sample2.45  Air
Sample1.16  Dirt
Sample1.14  Water
Sample2.45  Air
Sample1.16  Dirt
Sample1.16  Dirt
Sample1.14  Dirt
Sample2.45  Air
Sample1.16  Air

我创建了一个散列,计算每个样本给出结果的频率--水、空气、污垢(注意,这只是示例数据,但结构是相同的)。

代码语言:javascript
复制
    use warnings;
    use strict;
    my $inPut = "ExampleSample";
    open(READ,$inPut) || die "Coult not read $inPut: $!";

    my %sampleHash;

    while (<READ>) {

        chomp;
        my @temp = split("\t",$_);

        my $sample = $temp[0];

        my $type = $temp[1];

        $sampleHash{$type}{$sample} += 1;

    }

它按预期工作,并作为输出提供:

代码语言:javascript
复制
$VAR1 = {
          'Dirt' => {
                      'Sample1.16' => 4,
                      'Sample1.14' => 1
                    },
          'Air' => {
                     'Sample1.16' => 1,
                     'Sample2.45' => 4
                   },
          'Water' => {
                       'Sample1.14' => 3
                     }
        };

由于这是安静的,一个糟糕的数据结构,更深层次的东西,我想把这个数据放在一个矩阵,我有点迷失了。

所需的输出或此示例的转位并不重要:

代码语言:javascript
复制
    Sample1.14  Sample2.45  Sample1.16
Air     0           4           1
Dirt    4           0           4
Water   3           0           0

我真的被困在这里了,任何帮助都是非常感谢的!谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-04-13 13:29:53

您可以将散列散列“咀嚼”到数组中,然后将其输入到Acme::工具::透视()或数据::枢轴::透视()中。如下所示:

代码语言:javascript
复制
use Acme::Tools;
my $data={
    'Dirt' => {
        'Sample1.16' => 4,
        'Sample1.14' => 1
    },
    'Air' => {
        'Sample1.16' => 1,
        'Sample2.45' => 4
    },
    'Water' => {
        'Sample1.14' => 3
    }
};
my @sample=uniq(sort map keys(%$_), values %$data);
my @element=sort keys %$data;
my $data2=[ map { my $x=$_; map [$x,$_,$$data{$x}{$_}||' 0'], @sample } @element ];
print tablestring([Acme::Tools::pivot($data2,"Element")]);

输出:

代码语言:javascript
复制
Element Sample1.14 Sample1.16 Sample2.45
------- ---------- ---------- ---------- 
Air              0          1          4
Dirt             1          4          0
Water            3          0          0
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43255121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档