我有一个由DNA序列组成的属性,并希望将其翻译为氨基名称。 所以我需要将序列拆分为3的固定长度字符。 以下是数据样本
data=c("AATAGACGT","TGACCC","AAATCACTCTTT")
如何将其提取到:
[1] "AAT" "AGA" "CGT"
[2] "TGA" "CCC"
[3] "AAA" "TCA" "CTC" "TTT"
到目前为止,我只能找到如何将给定特定正则表达式的字符串拆分为分隔符
答案 0 :(得分:5)
尝试
strsplit(data, '(?<=.{3})', perl=TRUE)
或者
library(stringi)
stri_extract_all_regex(data, '.{1,3}')
答案 1 :(得分:3)
as.list(gsub("(.{3})", "\\1 ", data))
[[1]]
[1] "AAT AGA CGT "
[[2]]
[1] "TGA CCC "
[[3]]
[1] "AAA TCA CTC TTT "
或
regmatches(data, gregexpr(".{3}", data))
[[1]]
[1] "AAT" "AGA" "CGT"
[[2]]
[1] "TGA" "CCC"
[[3]]
[1] "AAA" "TCA" "CTC" "TTT"
答案 2 :(得分:3)
另一个解决方案,仍然是一个班轮,但不如其他人优雅(使用lapply
):
lapply(data, function(u) substring(u, seq(1, nchar(u), 3), seq(3, nchar(u),3)))
#[[1]]
#[1] "AAT" "AGA" "CGT"
#[[2]]
#[1] "TGA" "CCC"
#[[3]]
#[1] "AAA" "TCA" "CTC" "TTT"
答案 3 :(得分:1)
另:
library(gsubfn)
strapply(data, "...")