0
データセット1からデータセット2までの最寄りの距離を求めようとしています。私はHaversine関数を使って調べましたが、私は後で何をする必要があるのか分かりません。2つの異なるデータフレーム間の最近接距離の求め方
データセット1からデータセット2までの最寄りの距離を求めようとしています。私はHaversine関数を使って調べましたが、私は後で何をする必要があるのか分かりません。2つの異なるデータフレーム間の最近接距離の求め方
データのサンプルを提供していないので、再現可能な例としてUScensus2000tract
ライブラリのoregon.tract
データセットを使用します。
ここでは、this other answer hereから得る高速data.table
に基づく解決策があります。
# load libraries
library(data.table)
library(geosphere)
library(UScensus2000tract)
library(rgeos)
今、私はあなたにそれをより近づけるために、コード/再現性の例を変更したのは、すべての可能な起源のペアの組み合わせ(国勢調査の重心)と目的地(施設)
# get all combinations of origin and destination pairs
# Note that I'm considering here that the distance from A -> B is equal
from B -> A.
odmatrix <- CJ(Datatwo$Code_A , Dataone$Code_B)
names(odmatrix) <- c('Code_A', 'Code_B') # update names of columns
# add coordinates of Datatwo centroids (origin)
odmatrix[Datatwo, c('lat_orig', 'long_orig') := list(i.Latitude,
i.Longitude), on= "Code_A" ]
# add coordinates of facilities (destination)
odmatrix[Dataone, c('lat_dest', 'long_dest') := list(i.Latitude,
i.Longitude), on= "Code_B" ]
Now you just need to:
# calculate distances
odmatrix[ , dist := distHaversine(matrix(c(long_orig, lat_orig), ncol
= 2),
matrix(c(long_dest, lat_dest), ncol
= 2))]
# and get the nearest destinations for each origin
odmatrix[, .( Code_B = Code_B[which.min(dist)],
dist = min(dist)),
by = Code_A]
### Prepare data for this reproducible example
# load data
data("oregon.tract")
# get centroids as a data.frame
centroids <- as.data.frame(gCentroid(oregon.tract,byid=TRUE))
# Convert row names into first column
setDT(centroids, keep.rownames = TRUE)[]
# get two data.frames equivalent to your census and facility data
frames
Datatwo<- copy(centroids)
Dataone <- copy(centroids)
names(Datatwo) <- c('Code_A', 'Longitude', 'Latitude')
names(Dataone) <- c('Code_B', 'Longitude', 'Latitude')
で新しい
data.table
を作成してみましょう自分のデータ。 –私は知らないが、私はそれを見つけただけで、これを見つけた。https://stackoverflow.com/questions/36110815/how-to-use-disthaversine-functionそしてhttps://stackoverflow.com/questions/21496587/error-in-pointstomatrixp1-latitude-90 –
'?geosphere :: distHaversine'のヘルプファイルを読んでください - "値:rと同じ単位の距離のベクトルデフォルトはメートルです) " – SymbolixAU