我正在尝试在R中创建一个可以计算每个密码子频率的函数。
我们知道蛋氨酸是一种氨基酸,它只能由一组密码子ATG形成,因此它在每组序列中的百分比为1。而甘氨酸可以由GGT,GGC,GGA,GGG形成,因此,每个密码子将为0.25。
输入将是DNA序列,如-ATGGGTGGCGGAGGG,借助密码子表,它可以计算输入中每​​次出现的百分比。

请通过建议实现此功能的方法来帮助我。

例如,
如果我的论点是ATGTGTTGCTGG
然后,我的结果是

ATG=1
TGT=0.5
TGC=0.5
TGG=1




R的数据:

codon <- list(ATA = "I", ATC = "I", ATT = "I", ATG = "M", ACA = "T",
    ACC = "T", ACG = "T", ACT = "T", AAC = "N", AAT = "N", AAA = "K",
    AAG = "K", AGC = "S", AGT = "S", AGA = "R", AGG = "R", CTA = "L",
    CTC = "L", CTG = "L", CTT = "L", CCA = "P", CCC = "P", CCG = "P",
    CCT = "P", CAC = "H", CAT = "H", CAA = "Q", CAG = "Q", CGA = "R",
    CGC = "R", CGG = "R", CGT = "R", GTA = "V", GTC = "V", GTG = "V",
    GTT = "V", GCA = "A", GCC = "A", GCG = "A", GCT = "A", GAC = "D",
    GAT = "D", GAA = "E", GAG = "E", GGA = "G", GGC = "G", GGG = "G",
    GGT = "G", TCA = "S", TCC = "S", TCG = "S", TCT = "S", TTC = "F",
    TTT = "F", TTA = "L", TTG = "L", TAC = "Y", TAT = "Y", TAA = "stop",
    TAG = "stop", TGC = "C", TGT = "C", TGA = "stop", TGG = "W")

最佳答案

首先,我得到了查询列表和序列。

codon <- list(ATA = "I", ATC = "I", ATT = "I", ATG = "M", ACA = "T",
              ACC = "T", ACG = "T", ACT = "T", AAC = "N", AAT = "N", AAA = "K",
              AAG = "K", AGC = "S", AGT = "S", AGA = "R", AGG = "R", CTA = "L",
              CTC = "L", CTG = "L", CTT = "L", CCA = "P", CCC = "P", CCG = "P",
              CCT = "P", CAC = "H", CAT = "H", CAA = "Q", CAG = "Q", CGA = "R",
              CGC = "R", CGG = "R", CGT = "R", GTA = "V", GTC = "V", GTG = "V",
              GTT = "V", GCA = "A", GCC = "A", GCG = "A", GCT = "A", GAC = "D",
              GAT = "D", GAA = "E", GAG = "E", GGA = "G", GGC = "G", GGG = "G",
              GGT = "G", TCA = "S", TCC = "S", TCG = "S", TCT = "S", TTC = "F",
              TTT = "F", TTA = "L", TTG = "L", TAC = "Y", TAT = "Y", TAA = "stop",
              TAG = "stop", TGC = "C", TGT = "C", TGA = "stop", TGG = "W")

MySeq <- "ATGTGTTGCTGG"


接下来,我加载stringi库并将序列分成三个字符的块。

# Load library
library(stringi)

# Break into 3 bases
seq_split <- stri_sub(MySeq, seq(1, stri_length(MySeq), by=3), length=3)


然后,我使用table计算这三个基本块对应的字母。

# Get associated letters
letter_count <- table(unlist(codon[seq_split]))


最后,我将序列与计数的倒数绑定在一起,并重命名数据框列。

# Bind into a data frame
res <- data.frame(seq_split,
                  1/letter_count[match(unlist(codon[seq_split]), names(letter_count))])

# Rename columns
colnames(res) <- c("Sequence", "Letter", "Percentage")

#  Sequence Letter Percentage
#1      ATG      M        1.0
#2      TGT      C        0.5
#3      TGC      C        0.5
#4      TGG      W        1.0

08-25 06:01