我有點的xy座標,我想利用平均點的距離。我的數據被命名爲qq
,我獲得使用dist
作用距離矩陣帶條件距離的平均xy點數
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)
這裏的dput
我data.frame
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")
UPDATE
使用一些提供修改代碼的,我得到了2分,我需要在3-4的地方,3-6地方更換。這意味着我的觀點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
這不是我所需要的。暗淡的申請電話是2,16,我的預期輸出應該是4,2 –
檢查我的編輯,在dist矩陣的結果中存在投射問題。如果您希望獲得3-6和6-3(相同的結果)作爲兩個不同的數字,那麼您應該刪除'&upper.tri(...)' – Adam
我認爲我們正在接近但並不完全在那裏,檢查我的更新 –