excel 如何转置数据集的一列,同时匹配另一列包含不等数量的值?

t98cgbkg  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(137)

我有一个数据子集,它是使用/u/Itération-122442提供的帮助从我的原始数据集中使用awk函数创建的。Link to the original

Gene Name   Transcription_Factor_Name   Count
AT1G02190   AHL20   4
AT1G04445   AHL20   14
AT1G04600   AHL20   5
AT1G09080   AHL20   8
AT1G09932   AHL20   3
AT1G11300   AHL20   2
AT1G19250   AHL20   1
AT1G02190   AHL25   2
AT1G04445   AHL25   20
AT1G04600   AHL25   5
AT1G09080   AHL25   9
AT1G09932   AHL25   5
AT1G11300   AHL25   1
AT1G19250   AHL25   3
AT1G23840   AHL25   5

现在我想将数据集转换为其最终形式,如下所示

Gene Name   AHL20   AHL25
AT1G02190   4   2
AT1G04445   14  20
AT1G04600   5   5
AT1G09080   8   9
AT1G09932   3   5
AT1G11300   2   1
AT1G19250   1   3
AT1G23840   0   5

事情变得非常复杂,因为基因名称下的值并不相同,因为转录因子(第2列)可能存在或不存在于某些基因(基因名称)。更新:请查看最后一个条目(AT 1G 23840)在AHL 20下没有条目,所以需要添加为0,我真的很感激,如果有人能帮我把这个整理出来。感谢您的评分

7vhp5slm

7vhp5slm1#

假设你的输入和输出字段分隔符是制表符,并且你的数据集适合内存,你可以试试这个GNU awk脚本:

$ awk '
BEGIN { FS = OFS = "\t" }
NR > 1 { c[$1][$2] += $3; t[$2] }
END {
  printf("Gene Name")
  for(a in t) printf("%s%s", OFS, a)
  printf("\n")
  for(g in c) {
    printf("%s", g)
    for(a in t) printf("%s%d", OFS, c[g][a] + 0)
    printf("\n")
  }
}' foo.tsv
Gene Name        AHL20    AHL25
AT1G23840        0        5
AT1G11300        2        1
AT1G04445        14       20
AT1G04600        5        5
AT1G19250        1        3
AT1G09080        8        9
AT1G02190        4        2
AT1G09932        3        5

相关问题