假设我有一个由1
和0
组成的二进制数字向量。我想在数字向量中找到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.
假设我有一个由1
和0
组成的二进制数字向量。我想在数字向量中找到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.
为什么不这样:
which(diff(x)==1)+1
#[1] 5 9 12
自二元矢量,diff
评估将每当1
由0
之前给1
。
我们可以删除最后观察和从矢量第一个,检查它是否等于0和1分别
which(x[-length(x)]==0 & x[-1]==1) +1
#[1] 5 9 12
which(x & c(FALSE, diff(x) == 1L))
#[1] 5 9 12
请注意,二进制向量的更合适的数据类型是logical
。
我们也可以尝试从lag
dplyr
:
which(x == 1 & dplyr::lag(x, 1, 1) == 0)
# [1] 5 9 12
另一种选择:
which(tail(x, -1) & !head(x, -1)) + 1
#[1] 5 9 12