我有一个向量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.
答案 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
要实际检查您的容忍度,您可以使用any
和if
。在这里,我假设如果所有差异都超出您的容差,则需要返回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]