Этот вопрос очень похож на этот How can I get the average and standard deviations grouped by key?, но мне не удается его изменить, чтобы соответствовать моей проблеме.вычислить среднее значение небольших частей столбца, сгруппированное по ключу в perl?
У меня есть много файлов (.csv) с 7 столбцов, последние три колонки выглядеть следующим образом:
col5,col6,col7
1408,1,123
1408,2,234
1408,3,345
1408,4,456
1408,5,567
1408,6,678
1409,0,123
1409,1,234
1409,2,345
1409,3,456
1409,4,567
1409,5,678
1409,6,789
...
N,0,123
N,1,234
N,2,345
N,3,456
N,4,567
N,5,678
N,6,789
То, что я хочу сделать, это вычислить среднее значение последнего столбца (col7) для всех значений, которые имеют одинаковое значение в столбце 5 (col5), поэтому 1408, 1409, 1410, ... до тех пор, пока N и я не знаю N. Я хочу напечатать это среднее значение рядом с линией (в col8), который содержит 3 в столбце 6 (col6). Обратите внимание, что значение в колонке 6 (col6) от 0 до 6, а первый номер файла не всегда 0. Так что я хочу:
col1,col2,col3,col4,col5,col6,col7,col8
bla,bla,bla,bla,1408,3,345,400.5
bla,bla,bla,bla,1409,3,456,456
...
bla,bla,bla,bla,N,3,456,456
У меня есть сценарий, который я могу использовать для вычислить среднее значение, но я должен уметь вставлять свои значения в массив для этого. Ниже я попытался сделать это, но это не сработает. Кроме того, я просто пытаюсь изучить Perl самостоятельно, поэтому, если это похоже на дерьмо, я просто пытаюсь!
open (FILE, "<", $dir.$file) or die;
my @lines = <FILE>;
foreach my $line(@lines) {
my ($col1,$col2,$col3,$col4,$col5,$col6,$col7) = split(/\,/, $line);
push @arrays5, $col5;
}
foreach my $array5(@arrays5) {
foreach my $line(@lines) {
my ($col1,$col2,$col3,$col4,$col5,$col6,$col7) = split(/\,/, $line);
if ($array5 == $col5) {
push @arrays7, $col7;
}
}
}
close(FILE);
Что такое 'tmp_line'? – thb
Кроме того, вы имеете в виду просто игнорировать столбцы с 1 по 4? – thb
Ошибка $ tmp_line была исправлена. Мне не нужны столбцы 1 - 4, чтобы вычислить среднее значение, но я также хочу напечатать их в конце, я исправлю его в своем вопросе! – Nuttieke