平均行を同じパターンにする

平均行を同じパターンにする

私は巨大なテーブル(10列と6000行)を持っており、列3(ja)に同じパターンがある場合にのみ、すべての行の平均を計算する必要があります。私のテーブルには数字と文字列が含まれています。

例は次のとおりです。

pvalue  padj    ko  pathway
17,14   0,01    ko00620 Pyruvatemetabolism
15,76   0,01    ko00620 Pyruvatemetabolism
13,22   0,00    ko00620 Pyruvatemetabolism
12,40   0,00    ko00051 Fructoseandmannosemetabolism
12,03   0,01    ko00051 Fructoseandmannosemetabolism

こんなものを手に入れたい

pvalue  padj    ko  pathway
15,38   0,01    ko00620 Pyruvatemetabolism
12,22   0,00    ko00051 Fructoseandmannosemetabolism

ベストアンサー1

おそらくあなたが探している答えではありませんが、とにかく興味深いでしょう。

#!/usr/bin/env perl

use strict;
use warnings;

use DBI;

my $dbh = DBI->connect(
    'dbi:CSV:',
    undef, undef, {
        f_ext           => '.csv/r',
        csv_sep_char    => "\t",
        csv_quote_char  => undef,
        csv_escape_char => undef,
    }
);

my $sth = $dbh->prepare(
    'SELECT AVG(pvalue), AVG(padj), ko, pathway
    FROM data GROUP BY ko, pathway'
);
$sth->execute();

while ( my $row = $sth->fetchrow_arrayref ) {
    printf "%.2f\t%.2f\t%s\t%s\n", @$row;
}

$dbh->disconnect;

上記は、データがタブ区切りのCSVファイルにあると想定していますdata.csv

おすすめ記事