R索引字符串,其中字符块表示核苷酸变体

Gre*_*egS 6 regex string r bioinformatics

我的问题是我需要在字符串中找到一个位置,其中我有一些字符块,它们实际上应该只是一个字符位置.我正在使用核苷酸序列,我需要跟踪序列中的位置,但我有一些位置,其中有变体已被表示为[A/T],其中A或T可能存在,具体取决于哪个序列我关心(这是两个相似的DNA序列,它们在整个序列的几个位置上变化).因此,对于这些变体网站中的每一个,序列的长度是额外的四个字符/位置更长.

我知道我可以通过制作一个新的代码来解决这个问题,其中[A/T]可以转换为,例如X和[T/A]由Y表示,但这会让人感到困惑,因为已经有一个标准的简并代码,但是它不会跟踪哪个核苷酸来自哪个菌株(对于我来说,/来自菌株A的菌株和/来自菌株B的核苷酸之后).我想以某种方式索引这个DNA序列字符串,我在想这样:

如果我有一个像这样的字符串:

dna <- "ATC[A/T]G[G/C]ATTACAATCG"
Run Code Online (Sandbox Code Playgroud)

我想得到一个表/ data.frame:

pos nuc
1   A
2   T
3   C
4   [A/T]
5   G
6   [G/C]
... and so on
Run Code Online (Sandbox Code Playgroud)

如果我更了解正则表达式,我觉得我可以用某种方式使用strplit.我可以插入一个条件来分割每个字符,除非用方括号绑定,它应该作为一个块保存吗?

Pie*_*une 6

library('stringr')
df <- as.data.frame(strsplit(gsub("\\[./.\\]", '_', dna), ''), stringsAsFactors=F)
df[,1][df[,1] == '_'] <- str_extract_all(dna, "\\[./.\\]")[[1]];names(df) <- 'nuc'
df
#      nuc
# 1      A
# 2      T
# 3      C
# 4  [A/T]
# 5      G
# 6  [G/C]
# 7      A
# 8      T
# 9      T
# 10     A
# 11     C
# 12     A
# 13     A
# 14     T
# 15     C
# 16     G
Run Code Online (Sandbox Code Playgroud)


hwn*_*wnd 5

我是那种喜欢保持简单的人,这是一个简短的伎俩 ...

x <- 'ATC[A/T]G[G/C]ATTACAATCG'
data.frame(nuc = regmatches(x, gregexpr('\\[[^]]*]|.', x))[[1]])

#      nuc
# 1      A
# 2      T
# 3      C
# 4  [A/T]
# 5      G
# 6  [G/C]
# 7      A
# 8      T
# 9      T
# 10     A
# 11     C
# 12     A
# 13     A
# 14     T
# 15     C
# 16     G
Run Code Online (Sandbox Code Playgroud)

上面的正则表达式使用交替,在左侧我们匹配方括号内的子串,在右侧我们使用.匹配任何单个字符.

  • 像往常一样钉着它. (3认同)