【问题标题】:Clustering connected set of points (longitude,latitude) using R使用 R 对连接的点集(经度、纬度)进行聚类
【发布时间】:2015-01-15 08:57:25
【问题描述】:

我正在处理居中的经度 (x) 和纬度 (y) 数据。我的目标是对连接的位置进行聚类。

如果 earth_distance((x1,y1),(x2,y2))

我正在使用 R 中的 distHaversine 函数来计算地球距离。

这是一些示例数据,

x=c(1.000000, 1.055672, 1.038712, 1.094459, 1.133179, 1.116241, 1.126053, 1.181824,1.377892, 5.869881, 5.925270, 5.909721)

y=c(1.333368,1.304790,1.347332,1.318743,1.332676,1.375229,1.572287,1.544174,2.371105,2.337032,2.383415)

还有

距离

我希望找到由不同的连接点集形成的不同簇(每个连接的点集形成一个簇)。

我查看了How to cluster points and plot,但我无法解决我的问题。

非常感谢任何参考、建议或答案。

【问题讨论】:

  • R 没有 distHaversine 函数,但 geosphere 包有。
  • 您的示例数据未粘贴到 R 中。您遇到什么错误?
  • 感谢您的关注...抱歉我在输入时犯了一些错误...我编辑了示例数据...现在可以使用了。

标签: r google-maps latitude-longitude


【解决方案1】:

也许是这样。先做一些坐标:

> x=c(1.000000, 1.055672, 1.038712, 1.094459, 1.133179, 1.116241, 1.126053, 1.181824 ,1.377892, 5.869881, 5.925270)
> y=c(1.333368, 1.304790, 1.347332, 1.318743, 1.332676, 1.375229, 1.572287, 1.544174, 2.371105 ,2.337032, 2.383415)

制作成数据框

> xy = data.frame(x=x,y=y)

现在使用outer 循环所有行和列对以计算完整距离矩阵。由于它为所有ij 计算ijji,因此它的工作量是实际需要的两倍。无论如何,它为我们提供了一个距离矩阵:

> dmat = outer(1:nrow(xy), 1:nrow(xy), function(i,j)distHaversine(xy[i,],xy[j,]))

现在我们需要一个连接矩阵,它是任何距离小于 15,000 米的对:

> cmat = dmat < 15000

现在我们使用igraph 包来构建连接图对象:

> require(igraph)
> cgraph = graph.adjacency(cmat)

您可以绘制此图以查看集群形成,但请注意这些并未绘制在您的 x-y 空间中:

> plot(cgraph)

现在获取连接的集群:

> clusters(cgraph)
$membership
 [1] 1 1 1 1 1 1 2 2 3 4 4

$csize
[1] 6 2 1 2

$no
[1] 4

您可以将其添加到数据框中:

> xy$cluster = clusters(cgraph)$membership
> xy
          x        y cluster
1  1.000000 1.333368       1
2  1.055672 1.304790       1
3  1.038712 1.347332       1
4  1.094459 1.318743       1
5  1.133179 1.332676       1
6  1.116241 1.375229       1
7  1.126053 1.572287       2
8  1.181824 1.544174       2
9  1.377892 2.371105       3
10 5.869881 2.337032       4
11 5.925270 2.383415       4

还有情节:

> plot(xy$x,xy$y,col=xy$cluster)

【讨论】:

  • 它运行良好...感谢您提供如此好的插图和解决方案。
  • 请您勾选以接受此答案!
  • 是的,当然..我只是不知道这个过程。无论如何,再次感谢您的帮助。
猜你喜欢
  • 2015-02-11
  • 2014-06-18
  • 1970-01-01
  • 2011-05-19
  • 2019-08-03
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多