R中向量元素的最小差异的索引

时间:2012-12-18 02:23:15

标签: r

我有一个向量v。我想找到一个向量v的元素的最小差异的索引,它小于1e-2。我怎样才能获得索引?

    v = c(0.0002873771, 0.0006478544, 0.0092186701, 0.0267084167, 
        0.0457307072 , 0.3176459806)
    D = abs(diff(v)) < 1e-2

我想得到索引= 1而不是1和2,只是最小的一个。 如果我们有这个载体

    v = c( 0.01144003, 0.04644231, 0.05527114, 0.31680614)
    D = abs(diff(v)) < 1e-2
    index = which.min(abs(diff(v)) < 1e-2 )

它给我索引= = 1但实际上我的欲望指数是2而不是1.

2 个答案:

答案 0 :(得分:1)

如果您知道最小绝对差值小于容差,则.min是正确的函数,并且不需要D

> which.min(abs(diff(v)))
[1] 1

此代码,在您编辑过的问题中:

index = which.min(abs(diff(v)) < 1e-2 )

取逻辑向量的which.min。不是你想要的。这是你(可能)想要的:

v = c( 0.01144003, 0.04644231, 0.05527114, 0.31680614)
> which.min(abs(diff(v)))
[1] 2

要实际检查您的容忍度,您可以使用anyif。在这里,我假设如果所有差异都超出您的容差,则需要返回NA

min.difference.index <- if (any(abs(diff(v)) < 1e-2)) which.min(abs(diff(v))) else NA

答案 1 :(得分:0)

问题在于差异过程会让您失去一个观察成本。

见:

length(v) == length(D)
[1] FALSE

和:

length(v) == length(D) + 1
[1] TRUE

所以你的索引号总是“太低” - 因为它们指的是较短的“差异”对象中的位置。如果您希望使用此向量进行索引,请使用:

v[which.min(abs(diff(v))) + 1]

或:

Idx <- which.min(abs(diff(v))) + 1
v[Idx]