获取第1个第1次和第2次出现之间的向量索引

时间:2015-04-01 21:19:24

标签: r

假设我们有一个向量:

v <- c(0,0,0,1,0,0,0,1,1,1,0,0)

预期产出:

v_index <- c(5,6,7)

v始终以0开头和结尾。只有一种可能性在两个1 s之间存在零簇。

看起来很简单,无法理解......

3 个答案:

答案 0 :(得分:9)

我认为这样做

which(cumsum(v == 1L) == 1L)[-1L]
## [1] 5 6 7

这里的想法是将“one”的所有实例分成组并选择第一组,同时在开头删除“one”的出现(因为你只想要零)。

答案 1 :(得分:4)

v <- c(0,0,0,1,0,0,0,1,1,1,0,0)
v_index<-seq(which(v!=0)[1]+1,which(v!=0)[2]-1,1)


> v_index
[1] 5 6 7

说明:我问哪些指数不等于0:

which(v!=0)

然后我从该向量中获取第一个和第二个索引,并从中创建一个序列。

答案 2 :(得分:4)

这可能是最简单的答案之一。找到哪些项等于1,然后使用前两个索引生成一个序列,递增第一个并递减另一个。

block <- which(v == 1)
start <- block[1] + 1
end <- block[2] - 1
v_index <- start:end
v_index
[1] 5 6 7