首页 文章

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

提问于
浏览
4

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

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

如何将其提取到:

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

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

4 回答

  • 3

    尝试

    strsplit(data, '(?<=.{3})', perl=TRUE)
    

    要么

    library(stringi)
    stri_extract_all_regex(data, '.{1,3}')
    
  • 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"
    
  • 5
    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"
    
  • 1

    另一个:

    library(gsubfn)
    strapply(data, "...")
    

相关问题