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

R 如何找到密码子的特定频率?,r,bioinformatics,dna-sequence,R,Bioinformatics,Dna Sequence,我试图在R中建立一个函数,可以计算每个密码子的频率。 我们知道蛋氨酸是一种仅由一组密码子ATG形成的氨基酸,因此它在每一组序列中的百分比为1。其中,甘氨酸可由GGT、GGC、GGA、GGG形成,因此每个密码子的出现百分比为0.25。 输入将是类似ATGGGTGGCGGAGG的DNA序列,借助密码子表,它可以计算输入中每次出现的百分比 请帮助我提出实现此功能的方法 比如说,, 如果我的论点是ATGTTGCTGG 那么,我的结果就是 ATG=1 TGT=0.5 TGC=0.5 TGG=1 R的数

我试图在R中建立一个函数,可以计算每个密码子的频率。 我们知道蛋氨酸是一种仅由一组密码子ATG形成的氨基酸,因此它在每一组序列中的百分比为1。其中,甘氨酸可由GGT、GGC、GGA、GGG形成,因此每个密码子的出现百分比为0.25。 输入将是类似ATGGGTGGCGGAGG的DNA序列,借助密码子表,它可以计算输入中每次出现的百分比

请帮助我提出实现此功能的方法

比如说,, 如果我的论点是ATGTTGCTGG 那么,我的结果就是

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首先,我得到我的查找列表和序列

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"
然后,我使用
table
计算这三个基本块对应的字母

# Get associated letters
letter_count <- table(unlist(codon[seq_split]))
#获取相关字母

字母计数这里需要解决两件事:

  • 密码子
    转换为每个字母的分数

    ( fracs <- 1/table(unlist(codon)) )
    #         A         C         D         E         F         G         H         I 
    # 0.2500000 0.5000000 0.5000000 0.5000000 0.5000000 0.2500000 0.5000000 0.3333333 
    #         K         L         M         N         P         Q         R         S 
    # 0.5000000 0.1666667 1.0000000 0.5000000 0.2500000 0.5000000 0.1666667 0.1666667 
    #      stop         T         V         W         Y 
    # 0.3333333 0.2500000 0.2500000 1.0000000 0.5000000 
    codonfracs <- setNames(lapply(codon, function(x) unname(fracs[x])), names(codon))
    str(head(codonfracs))
    # List of 6
    #  $ ATA: num 0.333
    #  $ ATC: num 0.333
    #  $ ATT: num 0.333
    #  $ ATG: num 1
    #  $ ACA: num 0.25
    #  $ ACC: num 0.25
    
    编辑

    由于需要其他密码子的状态,请尝试以下操作:

    x <- codonfracs
    x[ ! names(x) %in% strsplit3(s) ] <- 0
    str(x)
    # List of 64
    #  $ ATA: num 0
    #  $ ATC: num 0
    #  $ ATT: num 0
    #  $ ATG: num 1
    #  $ ACA: num 0
    #  $ ACC: num 0
    #  $ ACG: num 0
    # ...snip...
    #  $ TAT: num 0
    #  $ TAA: num 0
    #  $ TAG: num 0
    #  $ TGC: num 0.5
    #  $ TGT: num 0.5
    #  $ TGA: num 0
    #  $ TGG: num 1
    

    x一个稍微不同的路径导致了这个解决方案:

    f0 <- function(dna, weight) {
        codons <- regmatches(dna, gregexpr("[ATGC]{3}", dna))
        tibble(id = seq_along(codons), codons = codons) %>%
            unnest() %>%
            mutate(weight = as.vector(wt[codons]))
    }
    
    第二,可能存在一个DNA序列载体,而不是一个

    dna <- c("ATGTGTTGCTGG", "GGTCGTTGTGTA")
    
    看起来在tidyverse中进行操作很方便,创建一个TIBLE(data.frame),其中
    id
    指示密码子来自哪个序列

    library(tidyverse)
    tbl <- tibble(id = seq_along(codons), codon = codons) %>% unnest()
    

    看起来您的示例数据是针对python的。你是不是想用标签代替R?或者(根据问题的内容)您是否忘记为示例数据提供R结构?我建议编辑包含R结构的内容。如果这不是我想要的,我很抱歉,我可以删除它。谢谢你的编辑,很抱歉。现在还不清楚
    “TGT”
    “C”
    应该是什么意思,以及如何知道你试图使甘氨酸的含义为0.25。这可能有助于说明如何根据您提供的结构计算出
    TGT=0.5
    (以及其他)。TGT和TGC编码DNA序列中的C,因此TGC形成C的概率为50%,TGT也为50%。其他氨基酸也是如此。这个问题是基于密码子的用法谢谢你们的帮助,但我应该怎么做才能得到64个密码子的答案呢。我只想得到64个密码子中的百分比,所以假设一个参数中没有TCC密码子,我想它会显示TCC=0,对于TCC=0,只需执行
    res[is.na(res)]先生,例如,如果我们的参数像ATGATAATCAT,那么我们会得到一个表,上面说S ATG代码代表M,百分比是!ATA,ATC,ATT为I编码,其百分比为0.3%,其余64个密码子列表显示为0,因为参数中没有其他密码子。如果我的参数包含1000到10k个字符,我想计算每个64个密码子的计数,然后检查其百分比,并在这四列的表格中得到输出(编码的密码子、氨基酸、计数和百分比)那么我该如何处理这个问题呢?请指导我。如何得到你得到的答案?@mayanksinghrajp但我相信我理解你的问题。你运行代码,答案存储在变量
    res
    中。是的,先生,我得到了,但我只想找到64个密码子的百分比,我的意思是,如果有900个密码子,哪些密码子代表C alon比它所能得出的百分比还要高that@MayankSinghRajput<代码>我想找到64个密码子的百分比只有。如果你只想考虑64个密码子,那么只使用带有64个密码子的列表(如上)。.或者你的意思是你想要得到所有64个密码子的百分比,即使百分比为零?是的,先生,我想要的正是你所说的。
    x <- codonfracs
    x[ ! names(x) %in% strsplit3(s) ] <- 0
    str(x)
    # List of 64
    #  $ ATA: num 0
    #  $ ATC: num 0
    #  $ ATT: num 0
    #  $ ATG: num 1
    #  $ ACA: num 0
    #  $ ACC: num 0
    #  $ ACG: num 0
    # ...snip...
    #  $ TAT: num 0
    #  $ TAA: num 0
    #  $ TAG: num 0
    #  $ TGC: num 0.5
    #  $ TGT: num 0.5
    #  $ TGA: num 0
    #  $ TGG: num 1
    
    f0 <- function(dna, weight) {
        codons <- regmatches(dna, gregexpr("[ATGC]{3}", dna))
        tibble(id = seq_along(codons), codons = codons) %>%
            unnest() %>%
            mutate(weight = as.vector(wt[codons]))
    }
    
    codon <- unlist(codon)
    weight <- setNames(1 / table(codon)[codon], names(codon))
    
    dna <- c("ATGTGTTGCTGG", "GGTCGTTGTGTA")
    
    codons <- regmatches(dna, gregexpr("[ATGC]{3}", dna))
    
    library(tidyverse)
    tbl <- tibble(id = seq_along(codons), codon = codons) %>% unnest()
    
    tbl <- mutate(tbl, weight = as.vector(weight[codon]))
    
    > tbl
    # A tibble: 8 x 3
         id codon weight
      <int> <chr>  <dbl>
    1     1 ATG    1    
    2     1 TGT    0.5  
    3     1 TGC    0.5  
    4     1 TGG    1    
    5     2 GGT    0.25 
    6     2 CGT    0.167
    7     2 TGT    0.5  
    8     2 GTA    0.25 
    
    tbl %>% group_by(id, codon) %>%
        summarize(wt = sum(weight))