私は2セットのポイントを持っていset1
ますset2
. ポイントの両方のセットには、ポイントに関連付けられたデータがあります。set1 のポイントは「エフェメラル」であり、特定の日付にのみ存在します。set2 のポイントは「永続的」で、特定の日付に作成され、その日付以降は永久に存在します。
set.seed(1)
dates <- seq(as.Date('2011-01-01'),as.Date('2011-12-31'),by='days')
set1 <- data.frame(lat=40+runif(10000),
lon=-70+runif(10000),date=sample(dates,10000,replace=TRUE))
set2 <- data.frame(lat=40+runif(100),
lon=-70+runif(100),date=sample(dates,100,replace=TRUE))
ここに私の問題があります:set1(一時的)の各ポイントについて、イベントがset1が発生する前に構築されたset2(永続的)の最も近いポイントまでの距離を見つけます。たとえば、set1 の最初のポイントは 2011 年 3 月 18 日に発生しました。
> set1[1,]
lat lon date
1 40.26551 -69.93529 2011-03-18
したがって、2011 年 3 月 18 日より前に作成された set2 の最も近い点を見つけたいと思います。
> head(set2[set2$date<=as.Date('2011-04-08'),])
lat lon date
1 40.41531 -69.25765 2011-02-18
7 40.24690 -69.29812 2011-02-19
13 40.10250 -69.52515 2011-02-12
14 40.53675 -69.28134 2011-02-27
17 40.66236 -69.07396 2011-02-17
20 40.67351 -69.88217 2011-01-04
追加のしわは、これらが緯度/経度のポイントであるため、地球の表面に沿って距離を計算する必要があることです。R パッケージフィールドは、これを行うための便利な機能を提供します。
require(fields)
distMatrix <- rdist.earth(set1[,c('lon','lat')],
set2[,c('lon','lat')], miles = TRUE)
私の質問は、Inf
set2 (距離行列の列) の点が set1 (距離行列の行) の点の後に構築された場合に、この行列の距離を調整するにはどうすればよいですか?