加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 23:54:52 所属栏目:大数据 来源:网络整理
导读:如下是一个不规则的文本(行列中有空缺位),将其行列转置,求新的文本。 Array.lst : 1? ? ? ? ? ? ?aa? ? ? ? ? ?bb? ? ? ? ? ?cc? ? ? ? ? ?dd 2? ? ? ? ? ? ?re? ? ? ? ? ?uy? ? ? ? ? ?oo? ? ? ? ? ?jj 3? ? ? ? ? ? ?uh? ? ? ? ? ?njk? ? ? ? ?kjh? ?

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

Array.lst

1???????aa??????bb??????cc??????dd

2???????re??????uy??????oo??????jj

3???????uh??????njk?????kjh?????jll

4???????bgjkh???klllj???hhgj????kk

5???????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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读