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