【发布时间】:2020-06-10 08:11:25
【问题描述】:
我刚刚开始使用 R 和空间分析,所以我缺少很多基础知识!
我的数据包含学校地址。对于每所学校,我想计算到最近学校的距离。我的数据还包含有关学校“特色”的信息。此变量 (sps) 编码为 1(“具有特殊功能”)或 0(“无特殊功能”)。我想计算从“具有特殊功能”的学校到“没有特殊功能”的学校的距离。这就是我的数据的样子:
head(data01)
id lon lat sps
1 11725 6.932546 50.38269 0
2 11739 6.975160 50.48649 1
3 26883 6.987575 50.50857 0
到目前为止,我设法使用 st_distance 推荐和以下代码计算到最近学校的距离。不幸的是,在使用此代码时,在某些情况下,最近的学校都有“特殊功能”。我只想要从 1 -> 0 或 0 ->1 而不是 1->1 的距离!
my_sf <- st_as_sf(data01,
coords = c("lon", "lat"), # x, y (order matters)
crs = 4326)
dist.mat <- st_distance(my_sf) # Great Circle distance since in lat/lon
# Number within 1.5km: Subtract 1 to exclude the point itself
num.1500 <- apply(dist.mat, 1, function(x) {
sum(x < 1500) - 1
})
# Calculate nearest distance
nn.dist <- apply(dist.mat, 1, function(x) {
return(sort(x, partial = 2)[2])
})
# Get index for nearest distance
nn.index <- apply(dist.mat, 1, function(x) { order(x, decreasing=F)[2] })
n.data <- data01
colnames(n.data)[1] <- "neighbor"
colnames(n.data)[2:ncol(n.data)] <-
paste0("n.", colnames(n.data)[2:ncol(n.data)])
mydata2 <- data.frame(data01,
n.data[nn.index, ],
n.distance = nn.dist,
radius1500 = num.1500)
rownames(mydata2) <- seq(nrow(mydata2))
感谢您的帮助!!
干杯,k
编辑:
我的最终数据集应如下所示:
head(data01)
id lon lat sps dist
11725 6.932546 50.38269 0 xxxx
11739 6.975160 50.48649 1 xxxx
26883 6.987575 50.50857 0 xxxx
Dist 是到下一所学校的距离(0-> 1 或 1 -> 0)
【问题讨论】:
标签: r geospatial distance sf