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より大きい正の整数(つまり刺激数)のいずれかです。刺激数は常に1つ以上の0値で区切られます)。
列4(刺激)の各数値を前の行の値と比較する方法を学びたいです。この比較から、データフレームに5番目の列を作成し、「PRE」と記述した場合、値は0、値が変更された場合は「OK」(ただし最初の2行/秒のみ)、0とは異なる残りの数値行の場合は「POST」で、新しい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」があることに注意してください(値0からの変更が検出された場合、OK値は最初の2行にのみ帰属します)。
これを解決する方法がわかりません。私の考えは次のとおりです。データフレームの列4の各行をループする必要があります。各行について 、前の行よりも大きいかどうかを確認する必要があります
mydataframe$Stimulus[i,4] > mydataframe$Stimulus[i-1,4]
その場合、新しい列に値「OK」を追加しますが、最初の2行だけを追加し、列4(刺激)の値がゼロになるまで列5(ステータス)に値「POST」を追加します。
作成したい5番目の列は、元のデータフレームと同じ行数の別の1列のデータフレームにすることもできます。それは問題ではありません、私はそれを元のデータフレームに結合することができました。
私の(理論的な)アプローチは問題ありませんか?これを達成するためのより簡単な方法はありますか?