如何找到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@Marydd
第二种方法是矩阵。如果出于某种原因您不喜欢列名,请使用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