R:缩短琴弦

时间:2015-10-02 01:55:52

标签: regex r string

将示例字符串ANNNNNNTCCGGG缩写为AN6TCCG3的最佳方法是什么,以便计算重复次数超过2次的所有字符,并以数字表示?

3 个答案:

答案 0 :(得分:6)

可能有一种更快的方法,但使用基础R

r <- rle(unlist(strsplit("ANNNNNNTCCGGG", ""))) # Compute RLE
m <- rbind(r$values, r$lengths) # Combine
paste(ifelse(m == 1, "", m), collapse="") 

答案 1 :(得分:3)

我怀疑生物传导器中可能有一个包可以做你想要的但是在基础R中扔东西并不太难

rle_shortener <- function(strings){
    cvecs <- strsplit(strings, "")
    sapply(cvecs, function(input){
        # Get the run length encoding of the input
        r <- rle(input)
        lens <- r$lengths
        # replace the 1s with blanks so that they
        # don't show up in the resulting string
        lens[lens == 1] <- ""
        # paste the character with the lengths
        paste(r$values, lens, collapse = "", sep = "")
    })
}


> rle_shortener(c("heeeeyo", "ANNNNNNTCCGGG"))
[1] "he4yo"    "AN6TC2G3"

答案 2 :(得分:3)

如果&#34;表现/速度&#34;这不是问题,这是另一种方法:

library(gsubfn)
gsubfn('(.)\\1{2,}', ~ paste0(x, nchar(`&`)), 'ANNNNNNTCCGGG')
# [1] "AN6TCCG3"