Para cada valor en un vector, obtén el siguiente valor más pequeño correspondiente.
Para cada elemento en un vector, quiero el valor correspondiente más pequeño en el vector, sin cambiar el orden original de los elementos.
Por ejemplo, supongamos que el vector dado es:
c(4, 5, 5, 10, 3, 7)
Entonces el resultado sería:
c(3, 4, 4, 7, 0, 5)
Ten en cuenta que, como 3 no tiene ningún valor más pequeño, quiero que sea reemplazado por 0.
Cualquier ayuda será muy apreciada. Gracias.
davy.ai
Una forma de lograr esto es utilizando la función
lag()
junto con la funciónifelse()
. Aquí hay un ejemplo de código:Esto producirá la siguiente salida:
Explicación del código:
c(4, 5, 5, 10, 3, 7)
y lo almacenamos en la variablevec
.diff_vec
tomando la diferencia entre cada elemento y su elemento anterior, utilizando la funciónlag()
. Esto nos dará un vector de la misma longitud quevec
, pero desplazado en un índice, donde cada elemento representa la diferencia entre el elemento correspondiente envec
y su elemento anterior.0
al inicio dediff_vec
para tener en cuenta el primer elemento devec
, que no tiene un elemento anterior con el que comparar.ifelse()
para reemplazar los valores negativos (o 0) endiff_vec
por0
y dejar los valores positivos intactos. Esto nos dará un nuevo vector donde cada elemento es o bien el elemento correspondiente envec
menos la diferencia con su elemento anterior (si la diferencia era positiva), o0
(si la diferencia era negativa o 0).result_vec
e imprimimos el resultado en la consola ([1] 3 4 4 7 0 5
).