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

本文介绍如何利用R语言内置函数实现文本数据的行列转置操作,包括使用Perl代码与R语言代码对比演示,并展示转置后的结果。

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

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


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值