Ich habe X-, Y- und Z-Koordinate von einer Hauptkomponentenanalyse, die ich eine euklidische Abstandsmatrix berechnen möchte.Berechne euklidische Abstandsmatrix von x, y, z Koordinaten
Testdaten:
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
Ich würde letztlich eine Tabelle in folgendem Format zurückkehren möchten:
A B ...
A 0 0.2 ...
B 0.2 0 ...
... ... ... ...
... ... ... ...
Offensichtlich ist die Entfernung über Daten gefälscht. Die X-, Y- und Z-Daten sind einfach ein Kopf des gesamten Datensatzes. Der vollständige Datensatz besteht aus etwa 4000 Ganzzahlen. Ich nehme an, dass dies auf eine effiziente Art und Weise geschehen müsste. Wenn es einfacher ist, könnte die Berechnung der nächsten Entfernungen von beispielsweise 10 Punkten ausreichen (die restlichen Punkte wären NA oder 0).
Jede Hilfe wäre sehr willkommen!
EDIT: Ein Vorschlag entstand, um dist
zu verwenden, aber ich glaube nicht, dass dies für drei Koordinaten zulassen. WENN ich dist verwenden, scheinen die Ergebnisse Unsinn (?) Zu sein.
> pca_coords_dist <- dist(pca_coords)
> head(pca_coords_dist)
[1] 0.03431210 0.04539427 0.04583855 0.03584466 0.04191922 0.04291657
Ich glaube, einen Weg, um dies zu realisieren ist eine Funktion erstellen Entfernung zu berechnen, und es wird auf jede Zeile paar Weise an. I denke, das ist eine korrekte Funktion, Abstand in drei Dimensionen zu berechnen.
euc.dist.3 <- function(x1, x2, y1, y2, z1, z2) sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2)
Wenn ich dies auf SampA und SampB anwende, ist das Ergebnis 1,56643.
Gibt es nun eine Möglichkeit, diese Funktion auf jede paarweise Zeile anzuwenden? und formatiere die Ausgabe in eine Distanzmatrix?
'dist' ist, was Sie brauchen –
Es ist mein Verständnis ist, dass' dist' nicht arbeite mit drei Koordinaten. Ich müsste eine Funktion paarweise auf jede Zeile anwenden. – user2117258
Wenn Sie "euc.dist.3" für A und B eingeben, erhalten Sie 0,0343121. Do' euc.dist.3 (-0,003467119, -0,007279433, -0,01422762, 0,01651597, -0,0101960126, 0,0045558849) ' –