利用perl或者R实现不规则文本的行列转置
如下是一个不规则的文本(行列中有空缺位),将其行列转置,求新的文本。 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |