24小时热门版块排行榜    

查看: 1254  |  回复: 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的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

FMStation

至尊木虫 (知名作家)

【答案】应助回帖

[perl code]
# Program in Perl
use Data:umper;
use POSIX;
my @sumY, @numY;
open my $fh, '<', "output.txt" or
     die "could not open file: $!";
$line = <$fh>;
while (my $line = <$fh> {
    my($Chr, $Pos, $Y) =  split /\s+/, $line;
    $cPos = floor($Pos / 100000) ;
    $sumY[$Chr][$cPos]+=$Y;
    $numY[$Chr][$cPos]++;
}
for (my $j= 1; $j <= 2; $j++)
{
    for (my $i= 0; $i <= 5; $i++)
    {
        $range = ($i+1)*100000;
        if ( !defined $numY[$j][$i] )
           { $avg = 0; }
        else
           { $avg = $sumY[$j][$i] / $numY[$j][$i]; }
        print "$j $range $avg\n";
    }
}
close $fh;

[output]
1 100000 -1.43249333333333
1 200000 -0.392446
1 300000 -0.1234
1 400000 2.2456
1 500000 0
1 600000 0
2 100000 -0.3122582
2 200000 -0.366919
2 300000 0
2 400000 0
2 500000 0
2 600000 -1.00859
8楼2016-08-18 06:01:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

FMStation

至尊木虫 (知名作家)

看不懂

» 本帖已获得的红花(最新10朵)

2楼2016-08-17 17:52:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

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的回帖

junruiwang

新虫 (小有名气)

送红花一朵
引用回帖:
2楼: Originally posted by FMStation at 2016-08-17 17:52:51
看不懂

就是按照0-100000,100001-200000,200001-300000......这些范围(每100000长度)对第三列进行求平均值。每个范围求一个平均值输出哦
6楼2016-08-17 19:20:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

junruiwang

新虫 (小有名气)

引用回帖:
5楼: Originally posted by James_ever at 2016-08-17 19:07:00
必须用这软件??

或者用别的语言写也成,只要能实现就行哈
7楼2016-08-17 19:23:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

FMStation

至尊木虫 (知名作家)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
junruiwang: 金币+100, ★★★★★最佳答案, 感谢~ 2016-08-20 14:33:13
CODE:
~~~~~~code~~~~~~~~~
# Program in Perl
use Data::Dumper;
use POSIX;
my @sumY, @numY;
open my $fh, '<', "output.txt" or
     die "could not open file: $!";
$line = <$fh>;
while (my $line = <$fh>) {
    my($Chr, $Pos, $Y) =  split /\s+/, $line;
    $cPos = floor($Pos / 100000) ;
    $sumY[$Chr][$cPos]+=$Y;
    $numY[$Chr][$cPos]++;
}
for (my $j= 1; $j <= 2; $j++)
{
    for (my $i= 0; $i <= 5; $i++)
    {
        $range = ($i+1)*100000;
        if ( !defined $numY[$j][$i] )
           { $avg = 0; }
        else
           { $avg = $sumY[$j][$i] / $numY[$j][$i]; }
        print "$j $range $avg\n";
    }
}
close $fh;

~~~~Output~~~~~~
1 100000 -1.43249333333333
1 200000 -0.392446
1 300000 -0.1234
1 400000 2.2456
1 500000 0
1 600000 0
2 100000 -0.3122582
2 200000 -0.366919
2 300000 0
2 400000 0
2 500000 0
2 600000 -1.00859

» 本帖已获得的红花(最新10朵)

9楼2016-08-18 06:02:35
已阅   回复此楼   关注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 = < ...

太感谢啦!关于自学perl,大神能否给指条明路啊?实验室只有我一个人刚开始学,感觉好费劲。。。

发自小木虫Android客户端
10楼2016-08-18 11:48:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 junruiwang 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿上海交大生物与医药专硕324分,求调剂 +3 jiajunX 2026-03-22 3/150 2026-03-22 19:32 by brblmd
[考研] 求调剂一志愿海大,0703化学学硕304分,有大创项目,四级已过 +5 幸运哩哩 2026-03-22 9/450 2026-03-22 18:34 by 幸运哩哩
[考研] 311求调剂 +3 26研0 2026-03-20 3/150 2026-03-22 14:46 by ColorlessPI
[考研] 求调剂 +5 Zhangbod 2026-03-21 7/350 2026-03-22 13:13 by Zhangbod
[考研] 广西大学材料导师推荐 +3 夏夏夏小正 2026-03-17 5/250 2026-03-21 22:20 by 金昊ML
[考研] 材料求调剂 +5 @taotao 2026-03-21 5/250 2026-03-21 20:55 by lbsjt
[考研] 311求调剂 +3 勇敢的小吴 2026-03-20 3/150 2026-03-21 17:40 by ColorlessPI
[考研] 336求调剂 +5 rmc8866 2026-03-21 5/250 2026-03-21 17:24 by 学员8dgXkO
[考研] 268求调剂 +9 简单点0 2026-03-17 9/450 2026-03-21 15:37 by lature00
[考研] 330求调剂0854 +3 assdll 2026-03-21 3/150 2026-03-21 13:01 by 搏击518
[考研] 083200学硕321分一志愿暨南大学求调剂 +3 innocenceF 2026-03-17 3/150 2026-03-21 02:35 by JourneyLucky
[考研] 华东师范大学-071000生物学-293分-求调剂 +3 研究生何瑶明 2026-03-18 3/150 2026-03-21 01:30 by JourneyLucky
[考研] 一志愿华南师大 070300(化学)304分求调剂 +3 0703武芊慧雪304 2026-03-18 3/150 2026-03-21 00:48 by JourneyLucky
[考研] 304求调剂 +7 司空. 2026-03-18 7/350 2026-03-20 23:08 by JourneyLucky
[考研] 一志愿 西北大学 ,070300化学学硕,总分287,双非一本,求调剂。 +4 晨昏线与星海 2026-03-19 4/200 2026-03-20 22:15 by JourneyLucky
[考研] 08工学调剂 +5 用户573181 2026-03-20 5/250 2026-03-20 15:47 by xia_2003
[考研] 一志愿中国海洋大学,生物学,301分,求调剂 +5 1孙悟空 2026-03-17 6/300 2026-03-19 23:46 by zcl123
[考研] 312求调剂 +8 陌宸希 2026-03-16 9/450 2026-03-18 12:39 by Linda Hu
[考研] 277调剂 +5 自由煎饼果子 2026-03-16 6/300 2026-03-17 19:26 by 李leezz
[硕博家园] 湖北工业大学 生命科学与健康学院-课题组招收2026级食品/生物方向硕士 +3 1喜春8 2026-03-17 5/250 2026-03-17 17:18 by ber川cool子
信息提示
请填处理意见