¿Cómo puedo comparar un valor en una columna con el anterior usando R?

Tengo un gran marco de datos en R compuesto por 4 columnas y miles de líneas. Aquí están las primeras líneas como ejemplo:

     ID     V1      V2     Stimulus
[1,]  001   74.80   803.0   0
[2,]  001   75.98   790.9   0
[3,]  001   75.95   791.1   0
[4,]  001   65.70   918.7   0
[5,]  001   59.63   1005.6  13
[6,]  001   59.44   1012.0  13
[7,]  001   59.62   1010.0  13
[8,]  001   63.85   942.4   13
[9,]  001   60.75   992.9   0
[10,] 001   59.62   1010.0  0
[11,] 001   61.68   974.0   0
[12,] 001   65.21   921.4   15
[13,] 001   59.23   1012.0  15
[14,] 001   61.23   979.5   15
[15,] 001   70.80   849.2   0

En este cuadro de datos, cada fila corresponde a 1 segundo. La columna 4 (Estímulo) es un 0 (es decir, ningún estímulo) o un entero positivo mayor que 0 (es decir, un número de estímulo). Los números de estímulo siempre están separados por uno o más valores 0).

Me gustaría aprender a comparar cada uno de los valores numéricos en la columna 4 (Estímulo) con el valor en la fila anterior: a partir de esta comparación, quiero crear una quinta columna en el marco de datos donde escribo "PRE" si el el valor es 0, "OK" cuando el valor cambia (pero solo para las primeras 2 filas / segundos) y "POST" para las filas numéricas restantes diferentes de 0 antes de que se presente nuevamente un nuevo valor de 0.

Este es un ejemplo de lo que me gustaría obtener del marco de datos anterior

         ID     V1      V2     Stimulus    Status
    [1,]  001   74.80   803.0   0           PRE
    [2,]  001   75.98   790.9   0           PRE
    [3,]  001   75.95   791.1   0           PRE
    [4,]  001   65.70   918.7   0           PRE
    [5,]  001   59.63   1005.6  13          OK
    [6,]  001   59.44   1012.0  13          OK
    [7,]  001   59.62   1010.0  13          POST
    [8,]  001   63.85   942.4   13          POST
    [9,]  001   60.75   992.9   0           PRE
    [10,] 001   59.62   1010.0  0           PRE
    [11,] 001   61.68   974.0   0           PRE
    [12,] 001   65.21   921.4   15          OK
    [13,] 001   59.23   1012.0  15          OK
    [14,] 001   61.23   979.5   15          POST
    [15,] 001   70.80   849.2   0           PRE

Observe que en las filas 7,8 y 14 tengo el valor "POST" (el valor correcto se atribuye solo a las primeras 2 filas cuando se detecta un cambio de un valor de 0).

No estoy seguro de cómo resolver esto. Mi idea es la siguiente: debo recorrer cada fila en la columna 4 de mi marco de datos. Por cada filai Debería comprobar si es mayor que la fila anterior

 mydataframe$Stimulus[i,4] >  mydataframe$Stimulus[i-1,4]

Si es así, agrego el valor "OK" a la nueva columna pero solo para las primeras 2 líneas, luego agregaría el valor "POST" en la columna 5 (Estado) hasta que el valor de la columna 4 (Estímulo) se convierta en cero.

La quinta columna que quiero crear también podría ser un marco de datos de una columna con el mismo número de líneas que el marco de datos original. No importa, yo podríaciego en el y al marco de datos original.

¿Mi enfoque (teórico) está bien? ¿Hay una manera más fácil de lograr esto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta