【发布时间】:2016-07-27 14:09:53
【问题描述】:
我有点的 xy 坐标,我想利用距离来平均点。我的数据名为qq,我使用dist函数获得距离矩阵
qq
X Y
2 4237.5 4411.5
3 4326.5 4444.5
4 4382.0 4418.0
5 4204.0 4487.5
6 4338.5 4515.0
mydist = as.matrix(dist(qq))
2 3 4 5 6
2 0.00000 94.92102 144.64612 83.0557 144.61414
3 94.92102 0.00000 61.50203 129.8278 71.51398
4 144.64612 61.50203 0.00000 191.0870 106.30734
5 83.05570 129.82777 191.08702 0.0000 137.28256
6 144.61414 71.51398 106.30734 137.2826 0.00000
我想做的是对更接近某个阈值的点进行平均,对于这个例子,我们可以使用 80。唯一低于该限制的成对距离是 3-4 和 3-6。 问题是如何回到原始矩阵并平均xy坐标,使3-4对一个点,3-6对另一个点(丢弃之前的点3,4和6)
这是我的 data.frame 的 dput
dput(qq)
structure(list(X = c(4237.5, 4326.5, 4382, 4204, 4338.5), Y = c(4411.5,
4444.5, 4418, 4487.5, 4515)), .Names = c("X", "Y"), row.names = 2:6, class = "data.frame")
更新
使用提供的一些修改代码,我得到了我需要在 3-4 位置和 3-6 位置替换的 2 点。这意味着我的第 3 点和第 4 点和第 6 点将不得不从 qq 中消失,这两个点应该附加到它上面
pairs <- which(as.matrix(dist(qq)) < 80 & upper.tri(as.matrix(dist(qq))), arr.ind = T)
t(apply(pairs,1,function(i) apply(qq[i,],2,mean)))
X Y
3 4354.25 4431.25
3 4332.50 4479.75
【问题讨论】:
标签: r coordinates distance euclidean-distance distance-matrix