24小时热门版块排行榜    

查看: 1136  |  回复: 10
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

junruiwang

新虫 (小有名气)

[求助] 求各位大神,perl 对特定范围内的数据求平均值已有1人参与

文件为:
Chr        Pos        Y
1        49820        -1.68855
1        54414        -1.55555
1        99585        -1.05338
1        103929        -0.523771
1        124119        -0.261121
1        200009        -0.1234
1        390189        2.2456
2        48625        0.0250024
2        88663        -0.659643
2        90128        -0.302134
2        122780        -0.366919
2        555583        -1.00859
想根据第一列和第二列的范围来求第三列的平均值,具体为:第二列的按照每100,000的长度来分组,把第三列求一个平均值,如果有些范围没有数值则写为0(如下)。想得到的结果是:
1  100,000    -1.432493333
1  200,000    -0.392446
1  300,000    -0.1234
1  400,000    2.2456
2  100,000    -0.3259234
2  200,000    0
2  300,000    0
2  400,000    0
2  500,000    0
2  600,000    -1.00859
其中100,000、200,000...代表0-100,000、100,000-200,000范围的意思。
求各位大神帮忙啦!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

junruiwang

新虫 (小有名气)

送红花一朵
引用回帖:
9楼: Originally posted by FMStation at 2016-08-18 06:02:35
~~~~~~code~~~~~~~~~
# Program in Perl
use Data:umper;
use POSIX;
my @sumY, @numY;
open my $fh, '<', "output.txt" or
     die "could not open file: $!";
$line = < ...

有个程序能否再帮忙看一下啊?有点错误。。
#! /usr/bin/perl -w

use strict;

die "perl $0 test \n" unless @ARGV==1;

my $file=shift;

open IN,$file||die;

my %hash;

map{my @p=split;$hash{$p[0]}{$_}=$p[1]}<IN>;

close IN;



foreach my $k(sort keys%hash){

        my $count=0;

        my $sum=0;

        foreach my $v(sort keys %{$hash{$k}}){

                $count++;

                $sum+=$hash{$k}{$v};

        }

   my$mean=sprintf "%.2f",$sum/$count;

print "$k\t",$mean,"\n";

}

就是第一列相同的计算一个平均值,
1        0.32
1        2
1        2
1        0.54
1        0.98
8        0.78
8        0.56
8        0.23
8        0.44
8        0.33
8        0.35
1的算一个平均值,8的算一个平均值,但是这个程序算出来的与我手动算的结果不一致,好像是1   2 这样有相同行的只保留了一个计算,这个应该怎么改呢?
11楼2016-08-24 22:42:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 11 个回答

FMStation

至尊木虫 (知名作家)

【答案】应助回帖

感谢参与,应助指数 +1
#!/usr/bin/perl
use warnings;
use strict;

my $sum = 0;
my $n = 0;
while (<> {
    $sum += $_;
    $n++;
}
print $sum/$n, "\n";

https://stackoverflow.com/questi ... averages-using-perl
3楼2016-08-17 18:09:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

FMStation

至尊木虫 (知名作家)

CODE:
#!/usr/bin/perl
use warnings;
use strict;

my $sum = 0;
my $n = 0;
while (<>) {
    $sum += $_;
    $n++;
}
print $sum/$n, "\n";

https://stackoverflow.com/questions/6906116/compute-averages-using-perl
4楼2016-08-17 18:10:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

James_ever

金虫 (文坛精英)

必须用这软件??
Take few risks early, the bonus following!科研MSN群:FutureChina@groups.live.com
5楼2016-08-17 19:07:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见