在R中提取固定长度的字符

时间:2015-04-25 18:00:26

标签: r split

我有一个由DNA序列组成的属性,并希望将其翻译为氨基名称。 所以我需要将序列拆分为3的固定长度字符。 以下是数据样本

data=c("AATAGACGT","TGACCC","AAATCACTCTTT")

如何将其提取到:

[1] "AAT" "AGA" "CGT"
[2] "TGA" "CCC" 
[3] "AAA" "TCA" "CTC" "TTT"

到目前为止,我只能找到如何将给定特定正则表达式的字符串拆分为分隔符

4 个答案:

答案 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, "...")