2016-07-28 3 views
-1

私はGPSトラッキングデータセットを使用しています。速度と時刻に基づいてデータセットをフィルタリングして遊んでいます。私が働いている種は、夕暮れのまわりでは活動しなくなり、その間に海面に浮かびますが、一度夜が過ぎると活動が再開します。データセット内の各動物について、最初に夕暮れ(21:30)の周りで非アクティブになった後、すべてのデータポイントを削除したいと思います。しかし、各動物は異なる時に活動しなくなるため、21:30以降に発生するすべてのデータポイントを単に除外することはできません。基本的にGPSトラッキングデータの低速通過クラスタの特定

私のデータは、このようになります...

AnimalID Latitude Longitude Speed Date 
99B  50.86190 -129.0875 5.6 2015-05-14 21:26:00 
99B  50.86170 -129.0875 0.6 2015-05-14 21:32:00 
99B  50.86150 -129.0810 0.5 2015-05-14 21:33:00 
99B  50.86140 -129.0800 0.3 2015-05-14 21:40:00 
99C....... 

、私はすべてが持っていることを、午後9時30分00秒後に発生する、GPSの位置(たとえば、5以上)のクラスタを見つけたいです< 0.8の速度。私はこの点以降のすべての点(特定されたクラスターを含む)を削除したいと思います。

誰もRの点のクラスタを識別する方法を知っていますか?または、このタイプのフィルタリングを複雑にする方法はありますか?

答えて

0

data.tableを使用すると、次の5つまたは5つのエントリの最大値を動物IDで検索することができます。次に、基準を満たしていないものを除外します。たとえば:

library(data.table) 

set.seed(40) 
DT <- data.table(Speed = runif(1:1000), AnimalID = rep(c("A","B"), each = 500)) 

DT[ , FSpeed := Reduce(pmax,shift(Speed,0:4, type = "lead", fill = 1)), by = .(AnimalID)] #0 + 4 forward 
DT[ , BSpeed := Reduce(pmax,shift(Speed,0:4, type = "lag", fill = 1)), by = .(AnimalID)] #0 + 4 backwards 

DT[FSpeed < 0.5 | BSpeed < 0.5] #min speed 

      Speed AnimalID FSpeed BSpeed 
1: 0.220509197  A 0.4926640 0.8897597 
2: 0.225883211  A 0.4926640 0.8897597 
3: 0.264809801  A 0.4926640 0.6648507 
4: 0.184270587  A 0.4926640 0.6589303 
5: 0.492664002  A 0.4926640 0.4926640 
6: 0.472144689  A 0.4721447 0.4926640 
7: 0.254635219  A 0.7409803 0.4926640 
8: 0.281538568  A 0.7409803 0.4926640 
9: 0.304875597  A 0.7409803 0.4926640 
10: 0.059605991  A 0.7409803 0.4721447 
11: 0.132069268  A 0.2569604 0.9224052 
12: 0.256960449  A 0.2569604 0.9224052 
13: 0.005059727  A 0.8543111 0.2569604 
14: 0.191478376  A 0.8543111 0.2569604 
15: 0.170969244  A 0.4398143 0.7927442 
16: 0.059577719  A 0.4398143 0.7927442 
17: 0.439814267  A 0.4398143 0.7927442 
18: 0.307714603  A 0.9912536 0.4398143 
19: 0.075750773  A 0.9912536 0.4398143 
20: 0.100589403  A 0.9912536 0.4398143 
21: 0.032957748  A 0.4068012 0.7019594 
22: 0.080091554  A 0.4068012 0.7019594 
23: 0.406801193  A 0.9761119 0.4068012 
24: 0.057445020  A 0.9761119 0.4068012 
25: 0.308382143  A 0.4516870 0.9435490 
26: 0.451686996  A 0.4516870 0.9248595 
27: 0.221964923  A 0.4356419 0.9248595 
28: 0.435641917  A 0.5363373 0.4516870 
29: 0.237658906  A 0.5363373 0.4516870 
30: 0.324597512  A 0.9710011 0.4356419 
31: 0.357198893  B 0.4869905 0.9226573 
32: 0.486990475  B 0.4869905 0.9226573 
33: 0.115922994  B 0.4051843 0.9226573 
34: 0.010581766  B 0.9338841 0.4869905 
35: 0.003976893  B 0.9338841 0.4869905 
36: 0.405184342  B 0.9338841 0.4051843 
37: 0.412468699  B 0.4942280 0.9113595 
38: 0.402063509  B 0.4942280 0.9113595 
39: 0.494228013  B 0.8254665 0.4942280 
40: 0.123264949  B 0.8254665 0.4942280 
41: 0.251132449  B 0.4960371 0.9475821 
42: 0.496037128  B 0.8845043 0.4960371 
43: 0.250853014  B 0.3561290 0.9858652 
44: 0.356129033  B 0.3603769 0.8429552 
45: 0.225943145  B 0.7028077 0.3561290 
46: 0.360376907  B 0.7159759 0.3603769 
47: 0.169606203  B 0.3438164 0.9745535 
48: 0.343816363  B 0.4396962 0.9745535 
49: 0.067265545  B 0.9641856 0.3438164 
50: 0.439696243  B 0.9641856 0.4396962 
51: 0.024403516  B 0.3730828 0.9902976 
52: 0.373082846  B 0.4713596 0.9902976 
53: 0.290466668  B 0.9689225 0.3730828 
54: 0.471359568  B 0.9689225 0.4713596 
55: 0.402111615  B 0.4902595 0.8045104 
56: 0.490259530  B 0.8801029 0.4902595 
57: 0.477884140  B 0.4904800 0.6696598 
58: 0.490480001  B 0.8396014 0.4904800 
      Speed AnimalID FSpeed BSpeed 

これは、すべてのクラスタを示しており、どちらかのすべては、あなたのコードで

(この場合は0.5で)私たちの分速以下の最高速度を持って、次または前の4(+アンカーセル) 、ちょうどDT <- as.data.table(myDF)を実行してください。myDFは使用しているdata.frameの名前です。

この分析では、GPS測定値が一定の間隔で測定されると仮定します。私はfill=1を設定して最初の4回と最後の4回の観測を投げ捨てています。 fill=を最高速度に設定する必要があります。

+0

@ Splash1199 'DT [!((FSpeed <0.8 | BSpeed <0.8)&date> as.Date(" 2015-05-15 21:30:00 "))]'を試してください。これは、条件を満たしているすべての行を除いた 'data.table'を返します(最初は?)。 – Chris

+0

あなたのGPSが一定の時間でない場合は、あなたの基準(すなわち、5イベントではなくx秒) – Chris

+0

と最後に、 'date> as.Date(" 2015-05-15 21:30:00 " ) 'は、その時点以降(すべての翌日の午前8時を含む)にすべての時間を除外します。あなたは、特定の毎日の時間範囲( '(時間)> 21.5 |時(日)<8)'のようなものに切り替えることをお勧めします。 – Chris

関連する問題