Как я могу сравнить значение в столбце с предыдущим, используя 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 это в и к исходному фрейму данных.
Мой (теоретический) подход хорош? Есть ли более простой способ добиться этого?