set1
とset2
の2点があります。両方の点の組は、その点に関連するデータを有する。 set1のポイントは「一時的」で、指定された日付にのみ存在します。 set2のポイントは「永久」であり、与えられた日付に構築され、その日付の後に永遠に存在します。2セットの日付間の最近隣の検索
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日に発生しました:
> 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
:
> set1[1,]
lat lon date
1 40.26551 -69.93529 2011-03-18
は、だから私は2011年3月18日の前に構築したSET2における最も近い点を見つけたいです追加のしわは、これらが緯度/経度の点であるため、地球の表面に沿った距離を計算する必要があります。 convienent functionを提供fields Rパッケージは、これを実行します
require(fields)
distMatrix <- rdist.earth(set1[,c('lon','lat')],
set2[,c('lon','lat')], miles = TRUE)
私の質問があり、SET2(距離行列の列)のポイントは、ポイントでの後に構築された場合、私はInf
にこの行列で距離を調整することができますかset1(距離行列の行)?
非常にエレガント。ありがとうございました! 1小さなバグ:あなたは 'ifelse'ステートメントを逆にしました。 set1 $ date
Zach
ありがとう、良いキャッチです。コードがコンパクトになってくると、本当に注意が必要です!もう一つの決定は、あなたがあなたの質問の "BEFORE"によって厳密に暗示されているので、あなたが '' <''や '' '' ''を使うかどうかです。 ;) –
うん、あまりにも動作します。助けてくれてありがとう! – Zach