提取并比较多行值

时间:2015-09-01 18:04:44

标签: arrays perl hash

我正在尝试从如下所示的文件中提取数据:

XLOC_000001 Schx    1   385 339.597 339.597 11.2848 -   OK
XLOC_000001 Schx    0   620 671.378 671.378 20.8907 -   OK
XLOC_000001 Schxdex 0   493 530.642 530.642 16.1373 -   OK
XLOC_000001 Schxdex 1   384 368.611 368.611 12.5572 -   OK
XLOC_000002 Schx    1   486 428.686 428.686 5.75646 -   OK
XLOC_000002 Schx    0   503 544.683 544.683 7.25738 -   OK
XLOC_000002 Schxdex 0   584 628.59  628.59  8.6694  -   OK
XLOC_000002 Schxdex 1   497 477.083 477.083 6.52573 -   OK
XLOC_000003 Schx    1   667 588.341 588.341 3.6527  -   OK
XLOC_000003 Schx    0   578 625.898 625.898 4.10985 -   OK
XLOC_000003 Schxdex 0   607 653.346 653.346 4.35889 -   OK
XLOC_000003 Schxdex 1   521 500.121 500.121 3.24867 -   OK
XLOC_000004 Schx    1   27  23.8159 23.8159 29.2102 -   OK
XLOC_000004 Schx    0   27  29.2374 29.2374 224.533 -   OK

第一列中的信息显示基因模型,第二列显示治疗组(Schx或Schxdex)。第3列显示每个处理组的技术重复(0或1)。那么,对于第一个基因模型:

model    treatment    rep    value
XLOC_000001    Schx    1    11.2848
XLOC_000001    Schx    0    20.8907
XLOC_000001    Schxdex    0    16.1373
XLOC_000001    Schxdex    1    12.5572  

我正在尝试对数据进行比较(我感兴趣的值在第7列)

1)每个治疗组中:20.890711.284816.137312.5572

2)每个治疗组之间:20.8907与。 12.557211.284816.1373

我写了一些代码,允许我为第一次比较执行相关性测试,但我无法弄清楚如何在第二次比较中执行相同操作。我正在过滤值($fpkm == 0$fpkm > 5000)然后转换它们。我正在进行的测试不允许丢失数据,因此如果在一个比较点中存在0或(> 5000),则删除整个模型:

my %data;
while (<$in>){
    chomp;
    next unless /^XLOC/;
    my @split = split;
    $data{$split[0]}{$split[1]}{$split[2]} = $split[6];
}

open my $out, '>', 'output.csv';

print $out "fpkm1,fpkm2\n";

my (%rep_count, $log_trans_fpkm, %filter, $fpkm);

for my $xloc (sort keys %data){
    for my $condition (keys $data{$xloc}){
        for my $replicate (sort keys $data{$xloc}{$condition}){
            $fpkm = $data{$xloc}{$condition}{$replicate};

            next if $fpkm == 0;
            $rep_count{$xloc}{$condition}++;

            $filter{$xloc}{$condition}{$replicate} = $fpkm if $replicate == 0 and $rep_count{$xloc}{$condition} == 1 and $condition eq 'Schx';
            $filter{$xloc}{$condition}{$replicate} = $fpkm if $replicate == 1 and $rep_count{$xloc}{$condition} == 2 and $condition eq 'Schx';
        }
        delete $filter{$xloc} if $fpkm == 0 or $fpkm > 5000;
    }
}

for my $id (sort keys %filter){
    for my $condition (keys $filter{$id}){
        for my $replicate (sort keys $filter{$id}{$condition}){
            my $fpkm = log2($filter{$id}{$condition}{$replicate});
            print $out "$fpkm," if $replicate == 0 and $condition eq 'Schx';
            print $out "$fpkm" if $replicate == 1 and $condition eq 'Schx';
        }
        print $out "\n";
    }
}

有人能帮我提取数据进行第二次比较吗?

为了澄清我想在这个例子中提取的数据是:

XLOC_000001 Schx    0   20.8907 
XLOC_000001 Schxdex 1   12.5572 
XLOC_000002 Schx    0   7.25738 
XLOC_000002 Schxdex 1   6.52573 
XLOC_000003 Schx    0   4.10985 
XLOC_000003 Schxdex 1   3.24867

格式如下:

20.8907 12.5572
7.25738 6.52573
4.10985 3.24867

1 个答案:

答案 0 :(得分:1)

从您的问题来看,您不清楚选择包含在提取物中的特定值的标准是什么。 出现您希望在治疗类型为Schx时复制0,并在治疗类型为Schxdex时复制1(从您的示例输出)。如果还有其他逻辑,那对我来说是不明显的。

稍微修改您的脚本:

    public void methodInFragmentB(yourParameters){
      //do whatever you want to do with the data..... 
}

<强>输出

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:gravity="center"
        android:text="What are you interested in?" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:gravity="center"
        android:padding="5px"
        android:weightSum="4" >

        <ImageButton
            android:id="@+id/imageButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@drawable/icon" />

        <ImageButton
            android:id="@+id/imageButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@drawable/icon" />

        <ImageButton
            android:id="@+id/imageButton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@drawable/icon" />

        <ImageButton
            android:id="@+id/imageButton4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:layout_weight="1"
            android:background="@drawable/icon" />
    </LinearLayout>
</LinearLayout>