私は巨大なテーブル(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
。