根据要绘制的字母从最后一列中提取频率值

根据要绘制的字母从最后一列中提取频率值

我有一个制表符分隔的文件,最后一列包含频率值(实际上这些值也是制表符分隔的)。我主要有两个值(例如,A:0 G:1),但有些行有三个值(例如,G:0 C:1 A:0)

CHROM   POS N_ALLELES   N_CHR   {ALLELE:FREQ}

NC_037638.1 355689  2   2   A:0 G:1

NC_037638.1 355694  2   2   G:0.5   A:0.5

NC_037638.1 355703  2   2   C:0.5   G:0.5

NC_037638.1 355706  2   2   T:0.5   C:0.5

NC_037638.1 355715  2   2   A:0.5   G:0.5

NC_037638.1 355794  3   1   G:0 C:1 A:0

NC_037638.1 355723  2   2   A:0 G:1

NC_037638.1 355732  2   2   C:0.5   T:0.5

.

.

.

我想根据四个字母(A、C、G、T)中的哪个字母提取频率值作为每行的新列。我想要的输出是这样的:

CHROM   POS N_ALLELES   N_CHR   A_FREQ G_FREQ C_FREQ T_FREQ

NC_037638.1 355689  2   2   0   1   NA   NA

NC_037638.1 355694  2   2   0.5  0.5  NA  NA

NC_037638.1 355703  2   2   NA  0.5  0.5  NA

NC_037638.1 355706  2   2   NA   NA  0.5  0.5

NC_037638.1 355715  2   2   0.5 0.5  NA NA

NC_037638.1 355794  3   1   0   0  1  NA

NC_037638.1 355723  2   2   0   1  NA  NA

NC_037638.1 355732  2   2   NA  NA  0.5 0.5

.

.

.

如果我有列中的频率值,那么我可以轻松地在 R 或其他程序中绘图。需要“NA”,但可能只是缺失值,甚至是 0。我最关心的是如何删除冒号并将值放入列中。

另一种解决方案可能是,如果有人可以建议我如何在 R 或 Excel 中绘制每个 POS 处每个碱基(A、T、G、C)的频率,而不必担心将其转换为列。

我尝试了不同的解决方案,并努力进行绘图,但都徒劳无功。任何帮助/建议都将不胜感激,以便在 bash/R/Python 中执行此操作。提前非常感谢!

答案1

鉴于

$ cat file
CHROM   POS     N_ALLELES       N_CHR   {ALLELE:FREQ}
NC_037638.1     355689  2       2       A:0     G:1
NC_037638.1     355694  2       2       G:0.5   A:0.5
NC_037638.1     355703  2       2       C:0.5   G:0.5
NC_037638.1     355706  2       2       T:0.5   C:0.5
NC_037638.1     355715  2       2       A:0.5   G:0.5
NC_037638.1     355794  3       1       G:0     C:1     A:0
NC_037638.1     355723  2       2       A:0     G:1
NC_037638.1     355732  2       2       C:0.5   T:0.5

然后

$ awk '
  BEGIN{
    split("A:G:C:T",allele,/:/); OFS="\t"
  }
  NR==1 {
    print $1,$2,$3,$4,"A_FREQ","G_FREQ","C_FREQ","T_FREQ"; next
  } 
  {
    for(i=5;i<=NF;i++){
      split($i,a,/:/); freq[a[1]]=a[2]
    }
  } 
  {
    for(i=1;i<=4;i++){
      $(i+4) = allele[i] in freq ? freq[allele[i]] : "NA"
    }
    delete freq
  } 
  1
' file
CHROM   POS     N_ALLELES       N_CHR   A_FREQ  G_FREQ  C_FREQ  T_FREQ
NC_037638.1     355689  2       2       0       1       NA      NA
NC_037638.1     355694  2       2       0.5     0.5     NA      NA
NC_037638.1     355703  2       2       NA      0.5     0.5     NA
NC_037638.1     355706  2       2       NA      NA      0.5     0.5
NC_037638.1     355715  2       2       0.5     0.5     NA      NA
NC_037638.1     355794  3       1       0       0       1       NA
NC_037638.1     355723  2       2       0       1       NA      NA
NC_037638.1     355732  2       2       NA      NA      0.5     0.5

相关内容