17,305 の池の池のエリアと緯度と経度の座標を含む csv ファイルがあります。各池について、その池から 1 km 以内にあるすべての池の座標を特定したいと思います。私は R の初心者なので、最近傍コードをいくつか適応できると考えました。Crawley の The R Book でこのループを見つけました。
x<-runif(100)
y<-runif(100)
par(pty="s")
plot(x,y,pch=16)
distance<-function(x1, y1, x2, y2) sqrt((x2 − x1)^2 + (y2 − y1)^2)
r<-numeric(100)
nn<-numeric(100)
d<-numeric(100)
for (i in 1:100) {
for (k in 1:100) d[k]<-distance(x[i],y[i],x[k],y[k])
r[i]<-min(d[-i])
nn[i]<-which(d==min(d[-i]))
}
for (i in 1:100) lines(c(x[i],x[nn[i]]),c(y[i],y[nn[i]]))
私はそれを適応させ、ピタゴラスを使用する代わりにHaversine式を使用する化石の deg.dist 関数を使用しました。
install.packages("fossil")
library(fossil)
Pond_A<-read.csv("C:\\ PondArea_data\\Pond_areas.csv")
r<-numeric(17305)
nn<-numeric(17305)
d<-numeric(17305)
for (i in 1:17305){
for (k in 1:17305) d[k]<-with(Pond_A,deg.dist(Longitude[i],Latitude[i],Longitude[k],Latitude[k]))
r[i]<-min(d[-i])
nn<-which(d<=1)
}
これにより、最後の池から 1 km 以内にあるすべての池の ID がわかるようです。しかし、すべての池の答えを得る方法を見つけることができなかったかもしれません。誰かが私に解決策を提供し、おそらくそれが機能する理由を説明できれば、非常に感謝しています.
ありがとう、
エイダン