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

来源:互联网 发布:sql identity属性 编辑:程序博客网 时间:2024/06/03 14:03

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

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 -wuse 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


0 0
原创粉丝点击