以下是一些示例数据,说明了如何使用pointDistance
:
library(raster)
#subject level data
subjectID <- c("A1","A2","A3","A4")
subxy <- matrix(c(-65, 42, -60, 4.5, -70, 20, -75, 41 ), ncol=2, byrow=TRUE)
#PM Block Locations
blockID <- c("B1","B2","B3","B4","B5")
blockxy <- matrix(c(-68, 22, -61, 25, -70, 31, -65, 11,-63, 21), ncol=2, byrow=TRUE)
# distance of all subxy to all blockxy points
d <- pointDistance(subxy, blockxy, lonlat=TRUE)
# get the blockxy record nearest to each subxy record
r <- apply(d, 1, which.min)
r
#[1] 3 4 1 3
所以这些对是:
p <- data.frame(subject=subjectID, block=blockID[r])
p
# subject block
#1 A1 B3
#2 A2 B4
#3 A3 B1
#4 A4 B3
说明它的工作原理:
plot(rbind(blockxy, subxy), ylim=c(0,45), xlab='longitude', ylab='latitude')
points(blockxy, col="red", pch=20, cex=2)
points(subxy, col="blue", pch=20, cex=2)
text(subxy, subjectID, pos=1)
text(blockxy, blockID, pos=1)
for (i in 1:nrow(subxy)) {
arrows(subxy[i,1], subxy[i,2], blockxy[r[i],1], blockxy[r[i],2])
}