Как я могу сравнить значение в столбце с предыдущим, используя R?

У меня большой массив данных в R, состоящий из 4 столбцов и тысяч строк. Вот первые строки в качестве примера:

     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

В этом кадре данных каждая строка соответствует 1 секунде. Столбец 4 (Стимул) представляет собой либо 0 (то есть стимул отсутствует), либо положительное целое число, большее 0 (то есть номер стимула). Номера стимулов всегда разделены одним или несколькими значениями 0).

Я хотел бы узнать, как сравнить каждое из числовых значений в столбце 4 (Stimulus) со значением в предыдущей строке: из этого сравнения я хочу создать 5-й столбец в кадре данных, в котором я пишу «PRE», если значение равно 0, «ОК», когда значение изменяется (но только для первых 2 строк / секунд), и «POST» для оставшихся числовых строк, отличных от 0, прежде чем новое значение 0 будет представлено снова.

Это пример того, что я хотел бы получить из предыдущего кадра данных

         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

Обратите внимание, что в строках 7,8 и 14 у меня есть значение «POST» (ОК Значение присваивается только первые 2 строки, когда обнаруживается изменение от значения 0).

Я не уверен, как решить это. Моя идея заключается в следующем: я должен циклически проходить через каждую строку в столбце 4 моего кадра данных. Для каждого рядаi Я должен проверить, если он больше, чем предыдущий ряд

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

Если это так, я добавляю значение «ОК» в новый столбец, но только для первых 2 строк, тогда я добавляю значение «POST» в столбце 5 («Состояние»), пока значение столбца 4 («Стимул») не станет равным нулю.

5-й столбец, который я хочу создать, также может быть отдельным одностолбцовым фреймом данных с тем же количеством строк, что и исходный фрейм данных. Это не важно, я могcbind это в и к исходному фрейму данных.

Мой (теоретический) подход хорош? Есть ли более простой способ добиться этого?

Ответы на вопрос(1)

Ваш ответ на вопрос