#TCGA系列#利用perl处理肺癌多样本miRNA表达谱

  • 我们利用第三方工具下载TCGA数据时,可能下载到的是单个样本的miRNA表达谱,如图:前面的序号是样本id#TCGA系列#利用perl处理肺癌多样本miRNA表达谱_第1张图片
  • 每个文本文档里的数据如图所示:
    #TCGA系列#利用perl处理肺癌多样本miRNA表达谱_第2张图片
  • 现在我们想把它的RPM取出来并为矩阵,如图:
    #TCGA系列#利用perl处理肺癌多样本miRNA表达谱_第3张图片
  • 这里我们利用perl处理:
#按顺序读取文件夹里的多个文件的文件名,并存入@array数组
my $DIR_PATH="E:/Data/Lung cancaer/miRNA/cancer";
opendir D, ${DIR_PATH};
@array = grep(/\.txt/,readdir D);

#创建几个空数组
my @file_id =();
my @new =();
my @row_name =();

#利用正则表达式将文件名中的样本id号取出,并存入@file_id数组
foreach $file (@array) {
  $file =~ m/.mirbase21./;
  push(@file_id,$`);
}

#创建列名,并存入数组(miR.txt就是前面当个样本中的第一列:miRNA名)
open(input, "E:/Data/miR.txt")or die $!;
while(defined($row=)){
       chomp($row);
       push(@row_name,$row);
}
close input;

#先遍历每个文件,再将每个文件的每行遍历一遍,并将第三列RPM值存入数组@new
foreach $list(@array){
    open(F, "E:/Data/Lung cancaer/miRNA/cancer/$list") or die $!;
    while(defined($line=)){
       chomp();
       @a=split(/\t/,$line);
       push(@new,$a[2]);
     }
}

#将每个样本的第三列列名换为样本id
$m=0;
while($m < 46){
   splice(@new,0+$m*1882,1,$file_id[$m]);
   $m=$m+1;
}

#取出@new数组中的值,注意循环的使用
open(output,">E:/Data/result.txt")or die $!;
$i=0;
while($i < 1882){
   print output "$row_name[$i]"."\t";
   $j=0;
   while($j < 46){
      chomp($new[$i+1882*$j]);
      print output "$new[$i+1882*$j]"."\t";
      $j=$j+1;
   }
   print output "\n";
   $i=$i+1;
}
close output;

你可能感兴趣的:(perl,生物)