2017-04-06 88 views
2

假设我有一个由10组成的二进制数字向量。我想在数字向量中找到1之前的0。所以,我想要得到的位置5, 9, 12以下向量:在二进制向量中查找1前面有0前缀

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

我已经试过这样:

which(x==0 & x[-1]==1, T) 

但它得到的0其次是1的,这是位置4,8和11.

回答

2

为什么不这样:

which(diff(x)==1)+1 
#[1] 5 9 12 

自二元矢量,diff评估将每当10之前给1

2

我们可以删除最后观察和从矢量第一个,检查它是否等于0和1分别

which(x[-length(x)]==0 & x[-1]==1) +1 
#[1] 5 9 12 
3
which(x & c(FALSE, diff(x) == 1L)) 
#[1] 5 9 12 

请注意,二进制向量的更合适的数据类型是logical

0

我们也可以尝试从lagdplyr

which(x == 1 & dplyr::lag(x, 1, 1) == 0) 
# [1] 5 9 12 
1

另一种选择:

which(tail(x, -1) & !head(x, -1)) + 1 
#[1] 5 9 12