两种awk方法实现转置(行变列,列变行)与R t(x)用时对比

2022-03-18  本文已影响0人  吃吃吃_就知道吃

示例文件:



此文件sep= \t,其他分隔符需要自己更换;

awk第一种方法

命令如下:

awk 'BEGIN{FS=OFS="\t"}{for(i=1;i<NF+1;i++){a[NR,i]=$i}}END{for(i=1;i<NF+1;i++){for(j=1;j<NR;j++){printf a[j,i]"\t"}print a[j,i]}}' testfile2

转置结果:


这种需求还是需要一些小操作的

awk第二种方法

根据列数用awk输出每一列时格式输出转为一行并保存到以列数为名的数组中,最后再输出所有数组,减少了一个维度会简单一些,代码如下:

awk 'BEGIN{FS=OFS="\t"}NR==1{for(i=1;i<NF+1;i++){a[i]=$i}}NR>1{for(i=1;i<NF;i++){a[i]=a[i]"\t"$i}a[i]=a[i]"\t"$i}END{for(i=1;i<NF+1;i++){print a[i]}}'  testfile2

使用R tx 函数

用时统计

结果是一样的,看一下用时(待转换的矩阵为55827行,13列的基因表达矩阵):
结果文件:


第一种:


第二种:


使用R tx函数用时:

能看出来第一种是最优的,第二种减少一个维度,增加了运行时间,R函数第二

上一篇 下一篇

猜你喜欢

热点阅读