我有一個來自主成分分析的x,y和z座標,我想計算一個歐幾里得距離矩陣。從x,y,z座標計算歐幾里得距離矩陣
測試數據:
X Y Z
samp_A -0.003467119 -0.01422762 -0.0101960126
samp_B -0.007279433 0.01651597 0.0045558849
samp_C -0.005392258 0.02149997 0.0177409387
samp_D -0.017898802 0.02790659 0.0006487222
samp_E -0.013564214 0.01835688 0.0008102952
samp_F -0.013375397 0.02210725 -0.0286032185
我最終會喜歡下面的格式返回表:以上
A B ...
A 0 0.2 ...
B 0.2 0 ...
... ... ... ...
... ... ... ...
顯然距離數據是假的。 X,Y和Z數據只是完整數據集的頭部。完整的數據集包含大約4000個樣本。我認爲這需要做一個有效的方式。如果比較容易,那麼計算最近的距離,比如說10分就足夠了(剩下的點將是NA或者0)。
任何幫助將不勝感激!
編輯:建議使用dist
出現,但我不相信這允許三個座標。如果我使用dist,結果似乎是無稽之談(?)。
> pca_coords_dist <- dist(pca_coords)
> head(pca_coords_dist)
[1] 0.03431210 0.04539427 0.04583855 0.03584466 0.04191922 0.04291657
我相信去了解這一個方法是創建一個函數來計算距離,並將其應用到每一行成對方式。 I 認爲這是計算三維距離的正確函數。
euc.dist.3 <- function(x1, x2, y1, y2, z1, z2) sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2)
如果我將此應用於sampA和sampB,結果爲1.56643。
現在,有沒有辦法將這個函數應用於每個成對的行?並將輸出格式化爲距離矩陣?
'dist'是你所需要的 –
這是我的理解是'dist'不使用三個座標。我需要以成對的方式對每一行應用一個函數。 – user2117258
如果你爲A和B做'euc.dist.3',它會給出0.0343121。做'euc.dist.3'(-0.003467119,-0.007279433,-0.01422762,0.01651597,-0.0101960126,0.0045558849)' –