Так как вы хотите использовать diff
для элементов с 0, мы можем выбрать элементы, которые находятся рядом с 0, потому что любое число, вычтенное 0, является тем же числом.
v[which(v == 0) + 1]
#[1] 1 7 9 7
Если есть любое другое число, кроме 0, которое мы хотим использовать diff
, мы можем выбрать следующее число и вычесть его из этого числа.
v[which(v == 0) + 1] - v[which(v == 0)]
#[1] 1 7 9 7
С 7
v[which(v == 7) + 1] - v[which(v == 7)]
#[1] -1 -5
Если мы хотим использовать diff
, мы можем получить индексы, которые равны 0 и числу рядом с ним, split
это на основе вхождения 0 и вычислить разницу, используя diff
.
inds <- which(v == 0)
v1 <- v[sort(c(inds, inds + 1))]
sapply(split(v1, cumsum(v1 == 0)), diff)
#1 2 3 4
#1 7 9 7