如何找到R中每对协调位置之间的空间距离

如何找到R中每对协调位置之间的空间距离,r,R,我试图找出每对协调位置之间的距离。然后,我想把它保存为矩阵。但是,我希望这个矩阵包括位置的编号 我写了代码,但它只给出了两个位置之间的距离 以下是我的尝试: library(sp) data("meuse") SpDist1 <- function(data) { dist <- spDists(meuse) n <- length(data) for (i in 1:(n - 1)) { for (j in (i+1):n) { d <

我试图找出每对协调位置之间的距离。然后,我想把它保存为矩阵。但是,我希望这个矩阵包括位置的编号

我写了代码,但它只给出了两个位置之间的距离

以下是我的尝试:

library(sp)
data("meuse")
SpDist1 <- function(data) {

  dist <- spDists(meuse)
  n <- length(data)
  for (i in 1:(n - 1)) {
    for (j in (i+1):n) {
      d <- dist[i,j]
      dd <- (c(i,j,d))
    }

}
  return(dd)
}
库(sp)
数据(“meuse”)

SpDist1用数据存储索引的想法让我觉得很奇怪,但你大概有这样做的动机。这将有助于编写一个实用函数,该函数采用二维矩阵并将其扩展为数组:

pad.matrix <- function(A){
  m <- nrow(A)
  n <- ncol(A)
  face1 <- matrix(rep(1:m,n),nrow = m)
  face2 <- t(matrix(rep(1:n,m),nrow = n))
  array(c(face1,face2,A),dim = c(m,n,3))
}
例如,
dd[4,5,]=4.0000 5.0000 199.9696
,这与
dist[4,5]=199.9696

编辑时:以下是从距离矩阵创建扩展二维矩阵的方法:

library(sp)
data("meuse")
dist <- spDists(meuse)
d <- expand.grid(1:nrow(dist),1:nrow(dist))
d$dist <- apply(d,1,function(r)dist[r[1],r[2]])
dd <- as.matrix(d)
dimnames(dd) <- NULL
dd <- dd[dd[,1] < dd[,2],]
dd <- dd[order(dd[,1]),]

我不知道您对dd的期望是什么,因为您每次迭代都会覆盖它的值。使用
dd非常感谢您的回答。非常感谢。我想将输出作为一个矩阵,其中第一列是第一个位置,第二列是第二个位置,第三列是它们之间的距离。所以,我将有一个由3列和大约4000行组成的大型矩阵。@Mary我知道你现在想做什么了。编辑有帮助吗?我根据你的帮助编写了一些代码。它工作正常,但有一些多余的。我试过这样做:
ddres@Mary
dd
第二种方法是矩阵。如果出于某种原因您不喜欢列名,请使用
dimnames(dd)@Mary I添加了一个编辑,解决了重复条目的问题。最后一个
dd
是一个矩阵,它只有
i
j
i
之间的距离。
library(sp)
data("meuse")
dist <- spDists(meuse)
d <- expand.grid(1:nrow(dist),1:nrow(dist))
d$dist <- apply(d,1,function(r)dist[r[1],r[2]])
dd <- as.matrix(d)
dimnames(dd) <- NULL
dd <- dd[dd[,1] < dd[,2],]
dd <- dd[order(dd[,1]),]
> head(dd)
     [,1] [,2]      [,3]
[1,]    1    2  147.0884
[2,]    1    3  440.7263
[3,]    1    4  889.3523
[4,]    1    5  953.7662
[5,]    1    6 1025.6077
[6,]    1    7  797.5861