在R中计算点与最近邻之间的平均距离

3

我正在尝试计算一个给定点与其x个最近邻居之间的平均距离,以了解数据集中点之间的距离。使用earth.dist()提供所有点之间的完整距离矩阵(和全局平均值),但我想找到一个点与其5个最近邻居之间的距离。例如:

frame <- data.frame(long = rnorm(100), lat = rnorm(100))
earth.dist(frame)
mean(earth.dist(frame))  # provides the global mean

非常感谢您能提供任何帮助,以便更好地接近邻居们。

3个回答

4
要为每个点获取5个最近的邻居,您可以执行以下操作:
library(fossil)
set.seed(15)
frame <- data.frame(long = rnorm(100), lat = rnorm(100))
ed <- earth.dist(frame)
closen <- apply(as.matrix(ed), 1, function(x) order(x)[1:6][-1])

因此,第一个点的最近邻居的索引为

closen[,1]
# [1] 41 26 13 75  7

2

我会对其进行排序,并计算除自身距离以外的所有距离的平均值:

distM <- as.matrix( fossil::earth.dist(frame))
apply( distM, 1, function(x) mean( x[order(x)][2:6] ) )
#----------
        1         2         3         4         5         6         7 
 93.57153  56.06655 129.84690  95.13023  55.96412  70.57303  55.60863 
        8         9        10        11        12        13        14 
111.79244  17.56394  34.10893  21.80423  20.30025  29.57373  31.13890 
snipped

0

我也用 lapply() 找到了解决方法。

distM <- as.matrix( fossil::earth.dist(frame))
unlist(lapply(1:nrow(distM), function(x) mean(distM[x, order(distM[x, ])[2:6]])))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接