【问题标题】:Extract a fixed-length character in R在R中提取一个固定长度的字符
【发布时间】:2015-04-25 18:00:26
【问题描述】:

我有一个包含 DNA 序列的属性,想将它翻译成它的氨基名称。 所以我需要将序列拆分为一个固定长度的字符,即 3。 这是数据样本

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

如何将其提取到:

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

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

【问题讨论】:

    标签: r split


    【解决方案1】:

    试试

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

    或者

    library(stringi)
    stri_extract_all_regex(data, '.{1,3}')
    

    【讨论】:

      【解决方案2】:

      另一种解决方案,仍然是一个班轮,但不如其他班轮优雅(使用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】:
        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"
        

        【讨论】:

          【解决方案4】:

          另一个:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-10-24
            • 1970-01-01
            • 2011-01-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多