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

1 篇文章 0 订阅

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值