這個問題與這個問題非常相似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中)在第6列(col6)中包含3。請注意,在第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 2012-04-26 12:12:32
另外,你的意思只是忽略第1至第4列? – thb 2012-04-26 12:14:20
$ tmp_line是一個錯誤,現在糾正它。我不需要第1 - 4列來計算平均值,但我最終還是要打印它們,我會在我的問題中糾正它! – Nuttieke 2012-04-26 12:17:43