Foro de debate

Encontrar la posición de una variable en un vector

 
Imagen de Aida LCobos
Encontrar la posición de una variable en un vector
de Aida LCobos - viernes, 18 de octubre de 2019, 13:56
 

Hola, soy algo nueva en programación en R y llevo varios días partiéndome la cabeza intentando hacer un programa que me de la posición de un número en un vector.

Tengo un vector x con una serie de 1000 números aleatorios con una media determinada y necesito recorrerlo hasta encontrar el primer número mayor a una determinada cantidad para después imprimir la posición i que ocupa en el vector.


Lo ilustro con un ejemplo:

n<-5
mean<-5
x<-rnorm(n, mean)

Así el vector x sería:

x<-(5.44, 5.77, 6.99, 5.73, 5.30)


Lo que necesito es recorrer este vector hasta encontrar un número mayor o igual a 6 y dar la posición que ocupa en el vector.

Comienzo definiendo un nuevo vector 'pos' que será el que usaré para mostrar la posición, y un while para recorrer el vector:

pos<-0
while (x[i]<=6) {
    pos<-i
    i=i+1
}

cat("el primer valor mayor a 6 ocupa la posicion", pos)

> El primer valor mayor a 6 ocupa la posición 3


Sé que está mal (por eso no me sale lo que necesito) pero he intentado diferentes cosas y no logro que me de la posición.

No necesito máximos ni mínimos, sólo encontrar el primer valor que no cumpla la condición, salir del bucle y mostrar la posición.



Imagen de Manuel Muñoz Márquez
Re: Encontrar la posición de una variable en un vector
de Manuel Muñoz Márquez - sábado, 19 de octubre de 2019, 10:05
 

Buenas:

Esta es una solución:

> x<-c(5.44, 5.77, 6.99, 5.73, 5.30)
> min(which(x >= 6))
[1] 3

Un saludo

Imagen de Aida LCobos
Re: Encontrar la posición de una variable en un vector
de Aida LCobos - sábado, 19 de octubre de 2019, 16:19
 
¡Muchas gracias!

Ahora otra pregunta, ¿habría alguna forma de hacerlo con un bucle while?


Que el while recorra todo el vector y pare al encontrar el primer valor, salir del bucle y dar la posición.

Había intentado con la función (mal hecha) que propuse al inicio, pero tardaba muchisimo tiempo (lo deje hasta 1 hora) y al final tenía que pararla manualmente, con alguna otra opción terminó solo pero no funcionaba como quiero.


Sé que es mucho lío con un bucle, pero es creo que entenderlo de la forma complicada ayuda a después usar mejor las funciones hechas para facilitarnos la vida.

Imagen de Aida LCobos
Re: Encontrar la posición de una variable en un vector
de Aida LCobos - sábado, 19 de octubre de 2019, 18:32
 
Lo he conseguido!


con i<-1 y sumando ahí las posiciones hasta que deje de cumplirse la condición del while

Imagen de Manuel Muñoz Márquez
Re: Encontrar la posición de una variable en un vector
de Manuel Muñoz Márquez - sábado, 19 de octubre de 2019, 20:11
 

Buenas:

Cada lenguaje tiene sus propias particularidades. En el caso de R los bucles se ejecutan muy lentamente. Por tanto, la otra opción es más rápida y "más complicada". Pues lo complicado es ajustarse a las características del lenguaje en uso y no programar en R como si se estuviese programando en C.

Un saludo.