es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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ón which en el vector booleano. Aquí está el código que lograría esto para el ejemplo v1:

    v1 <- c(20, 30, 5, 18, 2, 10, 8, 4)
    min_indexes <- which(v1 == min(v1))
    min_indexes
    

    La salida será:

    [1] 1 3 5
    

    Esto indica que los valores mínimos en v1 se encuentran en los índices 1, 3 y 5.

    Para el ejemplo v2, simplemente reemplazarías v1 con v2:

    v2 <- c(7, 3, 4, 4, 4, 10, 12, 2, 7, 7, 8)
    min_indexes <- which(v2 == min(v2))
    min_indexes
    

    La salida será:

    [1] 1 2 8
    

    Esto indica que los valores mínimos en v2 se encuentran en los índices 1, 2 y 8.

Comments are closed.