私は電子的にタグ付けされた魚を扱っています。私のテレメトリ データ (データフレーム "d") のスニペットを以下に示します。各タイムスタンプは、一意の魚の検出を表します。
TagID Detection Location RiverKm
163 02/23/2012 03:17:44 Alcatraz_E 4.414
163 02/23/2012 03:56:25 Alcatraz_E 4.414
163 04/14/2012 15:10:20 Alcatraz_E 4.414
163 04/14/2012 15:12:11 Alcatraz_N 4.414
163 03/11/2012 08:59:48 Alcatraz_N 4.414
163 03/11/2012 09:02:15 Alcatraz_N 4.414
163 03/11/2012 09:04:05 Alcatraz_N 4.414
163 03/11/2012 09:04:06 Alcatraz_N 4.414
163 03/11/2012 09:06:09 Alcatraz_N 4.414
163 03/11/2012 09:06:11 Alcatraz_E 4.414
多くの異なる TagID (個々の魚) があります。開始時刻 (「到着」) と終了時刻 (「出発」) を 1 時間の臨界値で識別することにより、各魚の遭遇期間に検出を分類したいと思います。たとえば、上記の魚 (TagID 163) の場合、出力は次のようになります。
TagID arrival departure Location RiverKm
163 02/23/2012 03:17:44 02/23/2012 03:56:25 Alcatraz_E 4.414
163 04/14/2012 15:10:2 04/14/2012 15:12:11 Alcatraz_N 4.414
163 03/11/2012 08:59:48 03/11/2012 09:06:11 Alcatraz_E 4.414
次のことを行うループ (またはその他のコード構造) を作成したいと思います。
for j in 1:length(unique(d$TagID))
- 最初の検出時刻 (「t1」) を特定する
- 時系列 (「t2」) でのそのタグの次の検出が t1 から 1 時間未満の場合、それをスキップして次の検出に進みます。それ以外の場合は、t1 を「到着」ベクトルに配置し、t2 を「出発ベクトル」に配置します。
- すべての到着および出発タイムスタンプが TagID ごとに分類された時点で停止します。
これを最も効率的な方法で行う方法がわかりません。ご協力をお願いします。
ありがとうございました!