我想使用函数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)
但是我不知道如何。
答案 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