如下是一个不规则的文本(行列中有空缺位),将其行列转置,求新的文本。
Array.lst:
1
2
3
4
5
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
显然,单纯用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
aa
bb
cc
dd jj jll kk fjj
@H_777_404@