假设我们有一个向量:
v <- c(0,0,0,1,0,0,0,1,1,1,0,0)
预期产出:
v_index <- c(5,6,7)
v
始终以0
开头和结尾。只有一种可能性在两个1
s之间存在零簇。
看起来很简单,无法理解......
答案 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