Ich versuche, den nächsten Abstand der Positionen in Datensatz 1 zu Datensatz 2 zu finden. Beide Datensätze sind unterschiedlich groß. Ich habe mich mit der Haversine-Funktion beschäftigt, bin mir aber nicht sicher, was ich danach machen soll.So finden Sie den nächsten Abstand zwischen zwei verschiedenen Datenrahmen
0
A
Antwort
1
Da Sie keine Probe Ihrer Daten bereitgestellt haben, werde ich den oregon.tract
Datensatz aus der UScensus2000tract
Bibliothek als ein reproduzierbares Beispiel verwenden.
Hier ist eine Lösung basierend auf schnelle data.table
, die ich von this other answer here bekomme.
# load libraries
library(data.table)
library(geosphere)
library(UScensus2000tract)
library(rgeos)
Lassen Sie uns jetzt einen neuen data.table
mit allen möglichen Paarkombinationen von Herkunft (Volkszählung Zentroide) erstellen und Ziele (Einrichtungen)
# get all combinations of origin and destination pairs
# Note that I'm considering here that the distance from A -> B is equal
from B -> A.
odmatrix <- CJ(Datatwo$Code_A , Dataone$Code_B)
names(odmatrix) <- c('Code_A', 'Code_B') # update names of columns
# add coordinates of Datatwo centroids (origin)
odmatrix[Datatwo, c('lat_orig', 'long_orig') := list(i.Latitude,
i.Longitude), on= "Code_A" ]
# add coordinates of facilities (destination)
odmatrix[Dataone, c('lat_dest', 'long_dest') := list(i.Latitude,
i.Longitude), on= "Code_B" ]
Now you just need to:
# calculate distances
odmatrix[ , dist := distHaversine(matrix(c(long_orig, lat_orig), ncol
= 2),
matrix(c(long_dest, lat_dest), ncol
= 2))]
# and get the nearest destinations for each origin
odmatrix[, .( Code_B = Code_B[which.min(dist)],
dist = min(dist)),
by = Code_A]
### Prepare data for this reproducible example
# load data
data("oregon.tract")
# get centroids as a data.frame
centroids <- as.data.frame(gCentroid(oregon.tract,byid=TRUE))
# Convert row names into first column
setDT(centroids, keep.rownames = TRUE)[]
# get two data.frames equivalent to your census and facility data
frames
Datatwo<- copy(centroids)
Dataone <- copy(centroids)
names(Datatwo) <- c('Code_A', 'Longitude', 'Latitude')
names(Dataone) <- c('Code_B', 'Longitude', 'Latitude')
Verwandte Themen
- 1. So finden Sie Abstand zwischen zwei Objekten in libgdx
- 2. Finden Sie den Abstand zwischen zwei aufeinanderfolgenden Bounding-Boxen?
- 3. Finden Sie den Abstand zwischen zwei DIVs mit jQuery?
- 4. Finden Sie den Abstand jedes Paares zwischen zwei Vektoren
- 5. So minimieren Sie den Abstand (Höhe) zwischen zwei Alpaka-Komponenten
- 6. So steuern Sie den Abstand zwischen zwei Labels zur Laufzeit
- 7. So entfernen Sie den Abstand zwischen zwei Abschnitten in Bootstrap
- 8. So ermitteln Sie den Abstand zwischen zwei Körpern in Bearbeitung
- 9. So finden Sie den nächsten Marker leaflet.js
- 10. Berechnen Sie den Abstand zwischen zwei Koordinaten in einem Koordinatensystem
- 11. Google Cardboard So ändern Sie den Abstand zwischen den Augen
- 12. So finden Sie nächsten Sonntag in verschiedenen Zeitzone (EST & IST)
- 13. So reduzieren Sie den Abstand zwischen den Zeilen mit Bootstrap
- 14. So geben Sie den Abstand zwischen den Schaltflächen mit Bootstrap
- 15. Berechnen Sie den Abstand zwischen zwei Punkten (C++ zu Java)
- 16. Den Abstand zwischen den beiden nächsten Zahlen in einem Array von n Zahlen finden. (Vorsortierte Arrays)
- 17. Finden Sie den Unterschied zwischen zwei Arrays
- 18. Finden Sie den Winkel zwischen zwei Lager
- 19. Finden Sie den Unterschied zwischen zwei Arrays
- 20. Wie Datenrahmen mit Verbindungen zwischen Daten in zwei verschiedenen Datenrahmen
- 21. Abstand zwischen den Spalten
- 22. LDA Gensim-Implementierung, Abstand zwischen zwei verschiedenen Dokumenten
- 23. Messen Sie den Abstand zwischen zwei HTML-Elemente Zentren
- 24. Berechnen Sie den Abstand zwischen zwei Punkten in Java
- 25. Füllen Sie den Abstand zwischen zwei Elementen automatisch, min Länge?
- 26. Passen Sie den Abstand nur zwischen zwei Unterplots in Matplotlib
- 27. Euklidischer Abstand zwischen Elementen in zwei verschiedenen Matrizen?
- 28. Zwei Strings so transformieren, dass der Abstand zwischen den Input Strings im Abstand zwischen den Output Strings "reflektiert" wird?
- 29. Abstand zwischen den Symbolleistenschaltflächen entfernen
- 30. Entfernen Sie den Abstand zwischen Kontrollkästchen
Ich habe den Code/reproduzierbaren Beispiel geändert, um es zu ähnlicher machen Ihre eigene Daten. Ich hoffe, die Antwort/Erklärung ist jetzt klarer –
Ich weiß es nicht, aber ich googelte es und ich habe diese https://stackoverflow.com/questions/36110815/how-to-use-disthaversine-function Und gefunden https://StackOverflow.com/Questions/21496587/error-in-pointstomatrixP1-Latitude-90 –
lesen Sie die Hilfedatei für '? Geosphere :: DistHaversine' - es sagt" Wert: Vektor der Entfernungen in der gleichen Einheit wie R (Standard ist Meter) " – SymbolixAU