识别以1为增长并获得位置的数字序列

时间:2013-12-05 11:55:08

标签: r vector indexing

我有一个向量,它部分包含以一个增长的数字序列,例如:

x<- c(1,2,3,5,4,2,40,41,2,9,4)

序列“1,2,3”和“40,41”是auch序列。我想要的是每个这样的序列产生一个载体,它需要主要载体中每个元素的位置(hier“x”)。对于给定的考试,它将是两个向量:

v1<-c(1,2,3) # for the sequence 1, 2 and 3 in x and
v2<-c(7,8)   # for the sequence 40 and 41 in x. 

我怎样才能在R中完成它?

3 个答案:

答案 0 :(得分:2)

x<- c(1,2,3,5,4,2,40,41,2,9,4)
n1 <- which(c(0, diff(x))==1)
n2 <- n1-1
n <- sort(union(n1,n2))
split(n, cumsum(c(1,diff(n))!=1))
# $`0`
# [1] 1 2 3
# 
# $`1`
# [1] 7 8

答案 1 :(得分:1)

我写过这个工具:cgwtools::seqle。它就像rle,但搜索序列。

答案 2 :(得分:0)

对不起,伙计们,我知道我错误地提出了这个问题。我使用seqle得到了我的结果,如下所示:

library("cgwtools")
x<- c(1,2,3,5,4,2,40,41,2,9,4)
v<-seqle(x,incr=1)$values
l<-seqle(x,incr=1)$lengths

erg<-list(rep(NA),length(v))
for(i in 1:length(v))
    erg[[i]]<-seq(v[i],l[i]+v[i]-1)