我有以下顺序:
my_seq <- "----?????-----?V?D????-------???IL??A?---"
我想要做的是检测非虚线字符的位置范围。
----?????-----?V?D????-------???IL??A?---
| | | | | | |
1 5 9 15 22 30 38
最后的输出将是字符串的向量:
out <- c("5-9", "15-22", "30-38")
我怎样才能用R来实现这一点呢?
发布于 2022-02-18 14:53:05
受@lovalery的伟大回答的启发,base R
解决方案是:
g <- gregexpr(pattern = "[^-]+", my_seq)
d <-data.frame(start = unlist(g),
end = unlist(g) + attr(g[[1]], "match.length") - 1)
paste(s$start, s$end, sep ="-")
# [1] "1-5" "11-18" "26-34"
发布于 2022-02-18 16:19:45
带utf8ToInt
的R基中的单线列
apply(matrix(which(diff(c(FALSE, utf8ToInt(my_seq) != 45L, FALSE)) != 0) - 0:1, 2), 2, paste, collapse = "-")
#> [1] "5-9" "15-22" "30-38"
发布于 2022-02-18 15:05:15
试一试
paste0(gregexec('-\\?', my_seq)[[1]][1,] + 1, '-',
gregexec('\\?-', my_seq)[[1]][1,])
#> [1] "5-9" "15-22" "30-38"
https://stackoverflow.com/questions/71175188
复制相似问题