2017-12-14 22 views
-1

私は、すべての事故のリストとその月の都市で起こった場所(約10,000の位置座標)を含むデータフレームを持っています。私のデータフレーム内のいくつのポイントがエリアシェイプファイルをオーバーラップしているかを調べる

私は、これらの事故の多くは、経度と緯度の特定のセットの間に起こったか見つける必要があります。(例えば緯度25'Sと27'Sの間、54 E、55 Eをlontitudes)
Accident ID Name   latitudes longitudes Intensity time 
1   citycentre  -25.5567 +54.00087  minor morning 
2   
3 
4 

方法はありますこのようなことをするにはR 私はRに慣れていますので、どんな助けでも大いに感謝します。私は、多数の月から、そして異なる座標の組の間で同じプロセスを実行しなければなりません。ループを実行し、カウンタ変数には非常に時間がかかります。

は、私は私の調査地域を作る場合、私はそれを行うには多くの方法があると確信しているポリゴン形状ファイルに私に

+0

ようこそ。あなたが試したことを示し、b。)最小限の再現可能な例を提供します。この例は、それ以上の変更を加えずにコピー、貼り付け、実行することができます。それ以外の場合は、ダウンボントや回答が得られません。 – lukeA

答えて

2

の事故の数を教えてくれますが利用可能機能があります。ここでは、非等価結合を使用しているのは1つだけです:

library(data.table) 
points <- fread("Accident_ID Name   latitudes longitudes Intensity time 
1   citycentre  -28.5567 +54.50087  minor morning 
2   citycentre  -28.5567 +54.50087  minor morning 
3   citycentre  0 0  minor morning 
4   citycentre  100 100  minor morning") 
extents <- data.table(
    extent_id=1:3, 
    x1=c(-30, -20, 1000), 
    x2=c(-27, 20, 1100), 
    y1=c(54, -54, 100), 
    y2=c(55, 55, 100) 
) 
points[extents, on=.(latitudes>=x1, latitudes<=x2, longitudes>=y1, longitudes<=y2)][ 
    ,.(N=sum(!is.na(Accident_ID))), by=extent_id] 
# extent_id N 
# 1:   1 2 
# 2:   2 1 
# 3:   3 0 
関連する問題