Ich bin neu in R und für mein momentanes Projekt muss ich eine Heatmap zeichnen, die sich auf ein bestimmtes Ereignis bezieht. Es gibt ungefähr 2 Millionen Beobachtungen eines solchen Ereignisses und bei jeder Beobachtung gibt es eine Längs- und eine Breitenkoordinate. Auch habe ich die Kartendaten in einen Datenrahmen umgewandelt und der Datenrahmen enthält 71 Bezirk, jeder Bezirk wird mit einer Menge von Koordinaten definiert. Ich muss entscheiden, welche Beobachtung der Veranstaltung zu welchem Bezirk gehört. Ich bin mit dem folgenden Code:Wie überprüft man, ob ein Punkt in einem Polygon liegt und R für große Datenmengen verwendet?
for (row in 1:nrow(data2015)){
point.x=data2015[row,"Latitude"]
point.y=data2015[row,"Longitude"]
for (name in names(polygonOfdis)){
if (point.in.polygon(point.x, point.y, polygonOfdis[[name]]$lat, polygonOfdis[[name]]$long, mode.checked=FALSE)){
count[[name]]<-count[[name]]+1
break
}
}
}
data2015 die für das Ereignis gesetzt Daten vorhanden sind, ist polygonOfdis die für jeden Stadtteil Daten.
Für kleine Datenmenge funktioniert dieser Algorithmus in Ordnung, aber für meinen Datensatz wird es definitiv mehr als zehn Stunden oder mehr laufen (Für einen Datensatz nur 1/400 der aktuellen Größe läuft dieser Algorithmus für 1 bis 2 Protokoll). Ich frage mich, ob es irgendeinen besseren Weg gibt herauszufinden, welche Beobachtung zu welchem Bezirk gehört? Mein Problem ist, dass die point.in.polygon Funktion zu viel Zeit braucht und ich frage mich, ob es irgendeine andere Funktion kann das tun?
PS: Die aktuellen Daten sind tatsächlich nur 1/10 der realen Daten, die ich verarbeiten muss, also brauche ich wirklich einen schnelleren Weg, dies zu tun.
Es ist wahrscheinlicher, eine Antwort zu erhalten, wenn Sie Ihren Code und einige Beispieldaten bereitstellen. – Dave2e