我有一个已转换为字符向量的字符串:
string <- c("A","A","A","C","G","G","C","C","T","T","T","T")
我希望能够输出一个表,该表按出现的顺序显示连续字母的索引。例如:
letter start end
A 1 3
C 4 4
G 5 6
C 7 8
T 9 12
我曾尝试研究str_locate
和其他一些str函数,但无法弄清楚。任何帮助表示赞赏!
答案 0 :(得分:5)
我将在cumsum
之后使用rle
s=rle(string)
v=cumsum(rle(string)$lengths)
data.frame('var'=s$values,'start'=v+1-s$lengths,'end'=v)
var start end
1 A 1 3
2 C 4 4
3 G 5 6
4 C 7 8
5 T 9 12
答案 1 :(得分:3)
我们可以将{string}的运行长度ID的split
用作list
,获取range
的值,rbind
{{1 }}元素
list
或者以紧凑的方式
rl <- rle(string)
lst <- lapply(split(seq_along(string), rep(seq_along(rl$values), rl$lengths)), range)
names(lst) <- r1$values
do.call(rbind, lst)
# [,1] [,2]
#A 1 3
#C 4 4
#G 5 6
#C 7 8
#T 9 12
或与library(data.table)
data.table(letter = string)[, .(letter = letter[1], start = .I[1],
end = .I[.N]), rleid(letter)]
tidyverse