在R中的字符串中查找顺序重复的索引

时间:2019-05-07 20:15:31

标签: r string

我有一个已转换为字符向量的字符串:

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函数,但无法弄清楚。任何帮助表示赞赏!

2 个答案:

答案 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