Cómo recorrer un vector numérico y marcar el índice del valor mínimo actual hasta encontrar uno más pequeño?
Quiero obtener los índices de los valores mínimos como:
r
v1 <- c(20, 30, 5, 18, 2, 10, 8, 4)
El resultado es:
r
1 3 5
Explicación:
Sobre v1
, comenzamos en el valor 20
. Sin avanzar, anotamos el valor mínimo (20
) y su índice (1
). Ignoramos el elemento adyacente porque es mayor que 20
. Por lo tanto, 20
aún tiene el registro del más pequeño. Luego nos movemos a 5
, que es más pequeño que 20
. Ahora que 5
es el más pequeño, anotamos su índice (3
). Como 18
no es más pequeño que el ganador hasta ahora (5
), lo ignoramos y seguimos avanzando hacia la derecha. Como 2
es el más pequeño hasta ahora, es el nuevo ganador y se anota su posición (5
). Ningún valor menor que 2
se mueve hacia la derecha, así que eso es todo. Finalmente, las posiciones son:
r
1 # para 20
3 # para 5
5 # para 2
Claramente, la salida siempre debería empezar con 1
, porque nunca sabemos qué viene a continuación.
Otro ejemplo:
v2 <- c(7, 3, 4, 4, 4, 10, 12, 2, 7, 7, 8)
<h1>resultado:</h1>
<p>1 2 8
Which.min()
parece bastante relevante. Pero no estoy seguro de cómo usarlo para obtener el resultado deseado.
davy.ai
Para obtener los índices de los valores mínimos, puedes utilizar la función
which
junto con el operador de comparación<
. Esto devolverá un vector de valores booleanos que indica si cada elemento en el vector es menor que el valor mínimo. Para obtener los índices, puedes utilizar nuevamente la funciónwhich
en el vector booleano. Aquí está el código que lograría esto para el ejemplov1
:La salida será:
Esto indica que los valores mínimos en
v1
se encuentran en los índices 1, 3 y 5.Para el ejemplo
v2
, simplemente reemplazaríasv1
conv2
:La salida será:
Esto indica que los valores mínimos en
v2
se encuentran en los índices 1, 2 y 8.