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

时间:2019-04-06 03:50:46

标签: r

我想使用函数diff计算向量中元素之间的差异。但是我只想对具有特定值的元素执行此操作。

假设我有一个向量

v <- c(0,1,3,5,0,7,6,0,9,0,7,2)

,我只想要与零(或任何其他值)的差。所以我会得到结果 1,7,9,7。

我想写类似的东西:

diff(v for which v == 0)

但是我不知道如何。

1 个答案:

答案 0 :(得分:1)

由于您要对{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和旁边的数字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