有没有办法计算R中多个点的平均距离?

问题描述 投票:0回答:1

我有一个包含 100 个坐标的数据集(长/纬度格式),并且能够使用 ggmap 绘制它们;它们有不同的类别(例如杂货店与加油站)。

我现在需要计算每个类别的坐标之间的平均距离(以比较杂货店与加油站之间的空间分布);我怎样才能在 R 中做到这一点?

已经看到很多关于计算两个空间点之间的距离的答案,但正在寻找考虑到这些多个点的分布并对它们进行平均的方法。使用与 R 不同的语言来做这件事是否更有意义?

r coordinates average geospatial distance
1个回答
0
投票

最简单的方法是自己计算距离并计算其平均值。使用

sf::st_distance()
您可以计算点之间的距离,例如:

(p是波兰Trzebnica商店的点坐标,取自OpenStreetMap)

bb <- osmdata::getbb("Trzebnica, dolnośląskie")
s <- osmdata::opq(bb, timeout = 25*60) |>
  osmdata::add_osm_feature(key =  "shop") |>
  osmdata::osmdata_sf()

p <- s$osm_points |>
  subset(!is.na(shop))

nrow(p)
#> [1] 36

sf::st_distance(p[1:3, ,], p[1:3, ,])
#> Units: [m]
#>          [,1]     [,2]     [,3]
#> [1,]   0.0000  85.6592 219.1792
#> [2,]  85.6592   0.0000 134.9195
#> [3,] 219.1792 134.9195   0.0000

sf::st_distance()
计算所有/每个点之间的距离并创建对称矩阵。我们应该从中删除 0 来计算平均值:

m <- sf::st_distance(p, p)
m[m == units::as_units(0, "m")] <- NA
m[1:3, 1:3]
#> Units: [m]
#>          [,1]     [,2]     [,3]
#> [1,]       NA  85.6592 219.1792
#> [2,]  85.6592       NA 134.9195
#> [3,] 219.1792 134.9195       NA

m |>
  mean(na.rm = TRUE)
#> 1018.374 [m]
© www.soinside.com 2019 - 2024. All rights reserved.