r - 开发核苷酸序列

标签 r regex bioinformatics dna-sequence

我想开发以下形式的表达式:

a <- "[AGAT]5GAT[AGAT]7[AGAC]6AGAT"

我想像这样转换表达式:

b <- "AGATAGATAGATAGATAGATGATAGATAGATAGATAGATAGATAGATAGATAGACAGACAGACAGACAGACAGACAGAT"

可以看到,钩子(Hook)后面的数字表示该模式被找到的次数。

目前我使用 sub(".*[*(.*?) *].*", "\\1", seq)[] 之间选择字符replicate(i, "my_string") 用于在 [] 之间复制序列,但我找不到如何让它与我的数据一起使用。

我希望说的很清楚。

最佳答案

我们使用gsub[('a1')之前没有数字的地方创建1,然后分别提取字母和数字('v1', ' v2'), 使用 strrep 进行复制并将子字符串粘贴到单个字符串 ('res')

library(stringr)
a1 <- gsub("(?<![0-9])\\[", "1[", a, perl = TRUE)
v1 <- str_extract_all(a1, '[A-Z]+')[[1]]
v2 <- str_extract_all(a1, "[0-9]+")[[1]]
res <- paste(strrep(v1, as.numeric(c(tail(v2, -1), v2[1]))), collapse='')
res

-输出

#[1] "AGATAGATAGATAGATAGATGATAGATAGATAGATAGATAGATAGATAGATAGACAGACAGACAGACAGACAGACAGAT"

-用'b'检查

identical(res, b)
#[1] TRUE

一个稍微更紧凑的正则表达式是改变第一步

a1 <- gsub("(?<=[A-Z])(?=\\[)|(?<=[A-Z])$", "1", a, perl = TRUE)
v1 <- str_extract_all(a1, '[A-Z]+')[[1]]
v2 <- str_extract_all(a1, "[0-9]+")[[1]]
res1 <- paste(strrep(v1, as.numeric(v2)), collapse="")
identical(res1, b)
#[1] TRUE

数据

a <- '[AGAT]5GAT[AGAT]7[AGAC]6AGAT'
b <- 'AGATAGATAGATAGATAGATGATAGATAGATAGATAGATAGATAGATAGATAGACAGACAGACAGACAGACAGACAGAT'

关于r - 开发核苷酸序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48882125/

相关文章:

javascript - Shiny 的 R : How to save list of checkbox inputs from datatable?

mysql - 使用 R 和 ORDBC 在数据库的单个表上插入数据框

python - 如何匹配一列中的唯一元素并列出第二列中的相应值

python - 如何从 PDB 文件中提取链?

r - 在 R 中为箱线图添加名称

r - 在 Rnw 中使用 ggvis 和 knitr

python - 无法按空格正确拆分 Wi-Fi 信号字符串

java - 对于相同输入,使用相同正则表达式的字符串数组长度存在差异

java - 连续的 appendReplacement 调用失败

python - 从大文件中检索行的更有效方法