r - 如何找到密码子的特定频率?

标签 r bioinformatics dna-sequence

我正在尝试在 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 库并将序列分成三个字符的 block 。

# Load library
library(stringi)

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

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

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

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

# 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

关于r - 如何找到密码子的特定频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50655313/

相关文章:

string - 计算子字符串在文件中出现的次数并将其放在新列中

python - 如何捕捉一组最长的序列

r - 如何在R中将10个以上的csv文件组合成一个数据框?

r - R 如何像 SAS 一样编写宏

email - 如何将电子邮件数据提取到 R 中?

bioinformatics - 如何从taxid获得界、门、纲、目、科、属和种的分类学特定ID?

python - 使用递归的生成器对象

awk - 计算传递闭包

python - 从 SRE_Match 对象获取跨度和匹配值 (Python)

r - 将txt文件转换为dataframe