将示例字符串ANNNNNNTCCGGG
缩写为AN6TCCG3
的最佳方法是什么,以便计算重复次数超过2次的所有字符,并以数字表示?
答案 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"