利用perl或者R实现不规则文本的行列转置

前端之家收集整理的这篇文章主要介绍了利用perl或者R实现不规则文本的行列转置前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如下是一个不规则的文本(行列中有空缺位),将其行列转置,求新的文本。

Array.lst

      aa      bb      cc      dd

      re      uy      oo      jj

      uh      njk     kjh     jll

      bgjkh   klllj   hhgj    kk

      hjj     kk              fjj


Perl代码

#! /usr/bin/perl -w
use strict;
die "perl $0 \n" unless @ARGV==1;
my $lst=shift;
open IN,$lst;
my (@a,@b);
my $len;
my $max=0;
while(<IN>){
        chomp;
        @b=split/\t/,$_;
        $len=@b;
        $max=$max > $len ? $max:$len;
        push @a,[@b];
}
close IN;
for my $i(0..$max-1){
        for(@a){
                @$_[$i]||="";
                print "@$_[$i]\t";
        }
        print "\n";
}
__END__



命令行: perl transposition.array.pl  array.lst > b

 

显然,单纯用perl实现起来比较繁琐,当然可以借助perl的相关模块实现快速转化,此处略去不讲。

接下来在R语言中,这个例子就很容易实现了,请看代码


> a<-read.table(file="array.lst",fill=T,sep="\t")
> write.table(t(a),file="./b",row.names=F,col.names=F,quote=F,sep="\t")



结果为:b.

1       2       3       4       5

aa      re      uh      bgjkh   hjj

bb      uy      njk     klllj   kk

cc      oo      kjh     hhgj

dd      jj      jll     kk      fjj

@H_777_404@

猜你在找的Perl相关文章