-1

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

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

我想得到 index = 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。

4

2 回答 2

1

如果您知道最小绝对差小于您的容差,which.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
于 2012-12-18T02:28:16.560 回答
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]
于 2012-12-18T03:14:35.223 回答