我想获取最小值的索引,例如:
v1 <- c(20, 30, 5, 18, 2, 10, 8, 4)
结果是:
1 3 5
说明:
在v1
上,我们从值20
开始。无需继续,我们记下最小值 (20
) 及其索引 (1
)。我们忽略相邻元素,因为它大于 20
。因此 20
仍然保持着最小的记录。然后我们转向5
,它小于20
。现在 5
是最小的,我们记下它的索引 (3
)。由于 18
并不小于迄今为止的获胜者 (5
),因此我们忽略它并继续向右走。由于 2
是迄今为止最小的,因此它是新的获胜者,并且它的位置已注明 (5
)。小于 2
的值不会向右移动,仅此而已。最后,立场是:
1 # for `20`
3 # for `5`
5 # for `2`
显然,输出应该始终以 1
开头,因为我们永远不知道接下来会发生什么。
另一个例子:
v2 <- c(7, 3, 4, 4, 4, 10, 12, 2, 7, 7, 8)
# output:
1 2 8
Which.min()
似乎非常相关。但我不确定如何使用它来获得所需的结果。
最佳答案
您可以使用:
which(v1 == cummin(v1))
[1] 1 3 5
如果您有重复的累积最小值并且不希望将重复项编入索引,则可以使用:
which(v1 == cummin(v1) & !duplicated(v1))
或者:
match(unique(cummin(v1)), v1)
关于r - 如何沿着数字向量并标记当前最小值的索引,直到找到更小的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70274738/