如下是一个不规则的文本(行列中有空缺位),将其行列转置,求新的文本。
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