R 计算特定元素向量中的差异

R 计算特定元素向量中的差异,r,R,我想用函数diff计算向量中元素之间的差异,但我只想对具有特定值的元素进行计算 假设我有一个向量 v <- c(0,1,3,5,0,7,6,0,9,0,7,2) 但是我不知道怎么做。因为你想对0元素使用diff,我们可以选择0旁边的元素,因为任何减去0的数字都是相同的数字 v[which(v == 0) + 1] #[1] 1 7 9 7 如果除了0还有其他数字,我们想使用diff,我们可以选择下一个数字并用该数字减去它 v[which(v == 0) + 1] - v[which(v

我想用函数diff计算向量中元素之间的差异,但我只想对具有特定值的元素进行计算

假设我有一个向量

v <- c(0,1,3,5,0,7,6,0,9,0,7,2)
但是我不知道怎么做。

因为你想对0元素使用diff,我们可以选择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的索引和它旁边的数字,根据0的出现对其进行分割,并使用diff计算差异


好的,但如果我想用除0以外的任何其他值来计算这个值?
v[which(v == 7) + 1] - v[which(v == 7)]
#[1] -1 -5
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