2017-12-13 8 views
1

1つのデータセット(検出)で見つかった時間(POSIXct内)と、POSIXctの範囲内で別のデータセット(GPS);第2のデータセットにあるGPS座標を第1のデータセット内の関連する位置にコピーします。あるデータセットのPOSIXctを他のデータセットのPOSIXctの範囲に一致させる

私は2つのデータセットを持っています:1つは検出データ、もう1つはGPS座標と到着/出発時間です)。検出データの

例:

Time     Receiver Transmitter Latitude Longitude 
2015-10-29 14:17:31 Boat  A69-25863  NA   NA 
2015-10-29 14:23:49 Boat  A69-25863  NA   NA 
2015-10-29 14:25:49 Boat  A69-25863  NA   NA 
2015-11-22 14:38:57 Boat  A69-25864  NA   NA 
2015-11-22 14:40:06 Boat  A69-25864  NA   NA 
(5429 entries) 

時間がPOSIXctフォーマットであり、送信機が要因です。 GPSデータの

例:

ArrivalLocation ArrivalTime   ArrivalLon ArrivalLat DepartureTime 
Saint Blaize  2015-10-29 12:19:08 22.14484  -34.17841 2015-10-29 14:38:29 
Pansy Beach  2015-10-29 15:04:17 22.12347  -34.16677 2015-10-29 15:27:45 
Santosstrand  2015-10-29 15:44:23 22.13361  -34.16975 2015-10-29 16:14:40 
Santosstrand  2015-10-29 16:29:32 22.13642  -34.17137 2015-10-29 16:58:39 
Seal Island  2015-11-22 13:49:30 22.12081  -34.14991 2015-11-22 18:25:05 
Saint Blaize  2015-11-22 18:40:19 22.14519  -34.17847 2015-11-25 09:07:18 
(669 entries) 

ArrivalTimeはとDepartureTime両方がPOSIXct形式です。

ここで、2番目のデータセットのGPS座標を1番目のデータセットの関連する位置にコピーします。

例:2015-10-29 14:17:31における第一の検出は、第一GPSの範囲内 座標:2015-10-29 12:19:082015-10-29 14:38:29Saint Blaize。そして、座標-34.1784122.14484が検出データセットにその関連細胞にコピーする必要があります手動で行う場合

Time     Receiver Transmitter Latitude Longitude 
2015-10-29 14:17:31 Boat  A69-25863  -34.17841 22.14484 

は、私が5400以上のエントリ(と成長)を持って考えると、これは雑用になります。

私はifelse()match()if(){}の機能を使用してみましたが、役に立たなかったと思います。

Detection$Latitude <- ifelse(Detection$Time >= GPS$ArrivalTime & Detection$Time <= GPS$DepartureTime, GPS$ArrivalLat, Detection$Latitude) 
Detection$Latitude <- GPS[match(Detection$Time >= GPS$ArrivalTime & Detection$Time <= GPS$DepartureTime), "ArrivalLat"] 

範囲を指定する方法に問題があると思われますが、これは最大のエラーではない可能性があります。

(物事が十分に明らかにされていない場合、これが私の謝罪ので、スタックオーバーフローの私の最初の投稿/質問です。)

答えて

0

ここでは、実用的なソリューションです。あるベクトルを別のベクトルのすべての値と比較しているので、私は単純なループを使用します。あなたのGPSデータフレームが1000エントリ未満であるので、パフォーマンスはひどいものではありません。私はより効率的な方法があるはずだと信じています。

dplyrパッケージのbetween機能を使用しました。

library(dplyr) 
for (i in 1:length(gps$ArrivalTime)){ 
    isbewteen<-between(detection$Time, gps$ArrivalTime[i], gps$DepartureTime[i]) 
    detection$Latitude[isbewteen ]<-gps$ArrivalLat[i] 
    detection$Longitude[isbewteen ]<-gps$ArrivalLon[i] 
} 
:あなたのデータフレームは、「検出」と「GPS」と命名し、時間列はPOSIXct形式であると仮定すると
関連する問題