Ich habe eine Frage zur räumlichen Aggregation in R. Ich versuche, einen Punktdatensatz zu einem Raster zusammenzufassen. Ich bin mir jedoch nicht sicher, wie ich das machen soll, da ich wenig Erfahrung mit solchen Sachen habe. Ich hatte gehofft, dass irgendjemand von Ihnen eine nützliche Anleitung / eine mögliche Lösung hat.
Mein Standpunkt ist ein Datensatz mit georeferenzierten Daten zu Konfliktereignissen in Afrika (siehe www.acleddata.com). Die Punkte sind mit Breiten- / Längenkoordinaten georeferenziert und enthalten Daten zu Ereignistyp und -zeit. Ich möchte diese Punkte zu einem 1x1-Grad-Raster zusammenfassen.
Daher sollte eine Gitterzelle die Informationen der Datenpunkte enthalten, wenn ein Ereignis in dieser Gitterzelle aufgetreten ist. Das Endprodukt sollte ein Datenrahmen sein oder etwas, das ich in eine CSV-Datei exportieren kann, da die Daten in einem Panel-Datensatz für statistische Analysen verwendet werden sollen.
Bisher habe ich die Daten und das Shapefile mit dem folgenden Code geladen und geplottet. Ich glaube, dass ich die Over- Funktion aus dem SP- Paket verwenden sollte, um zu aggregieren, aber ich weiß nicht wie. Hoffe, einer von euch kann helfen.
Den Code, den ich bisher verwendet habe, finden Sie hier mit dem entsprechenden visuellen Ergebnis dort .
Vorschläge dazu in QGIS sind ebenfalls willkommen.
quelle
Antworten:
Die heruntergeladenen Daten enthalten einige offensichtliche Positionsfehler. Als Erstes beschränken Sie die Koordinaten auf sinnvolle Werte:
Das Berechnen von Gitterzellenkoordinaten und -identifikatoren ist lediglich eine Frage des Abschneidens der Dezimalstellen von den Breiten- und Längengradenwerten. (Bei beliebigen Rastern zentrieren und skalieren Sie diese zunächst auf die Einheitsgröße, kürzen die Dezimalstellen und skalieren und zentrieren sie dann wieder in ihre ursprüngliche Position zurück, wie im Code
ji
unten gezeigt.) Wir können diese Koordinaten zu eindeutigen Bezeichnern kombinieren. Hängen Sie sie an den Eingabedatenrahmen an, und schreiben Sie den erweiterten Datenrahmen als CSV-Datei. Es wird einen Datensatz pro Punkt geben:Möglicherweise möchten Sie stattdessen eine Ausgabe, die Ereignisse in jeder Rasterzelle zusammenfasst. Um dies zu veranschaulichen, berechnen wir die Anzahl pro Zelle und geben diese aus, einen Datensatz pro Zelle:
Ändern Sie für andere Zusammenfassungen das
function
Argument in der Berechnung voncounts
. (Verwenden Sie alternativ eine Tabellenkalkulations- oder Datenbanksoftware, um die erste Ausgabedatei nach Zellenkennung zusammenzufassen.)Lassen Sie uns zur Kontrolle die Zählungen mithilfe der Rastermitten zuordnen , um die Kartensymbole zu lokalisieren. (Die Punkte im Mittelmeer, in Europa und im Atlantik haben verdächtige Standorte: Ich vermute, dass viele davon auf eine Vermischung von Breiten- und Längengraden bei der Dateneingabe zurückzuführen sind.)
Dieser Workflow ist jetzt
Gründlich dokumentiert (durch den
R
Code selbst),Reproduzierbar (durch erneutes Ausführen dieses Codes),
Erweiterbar (durch offensichtliche Änderung des Codes) und
Ziemlich schnell (die gesamte Operation dauert weniger als 10 Sekunden, um diese 53052 Beobachtungen zu verarbeiten).
quelle
Nun, was Sie wollen, ist ein sogenannter "Spatial Join", der zwei Shapefiles miteinander vergleicht und die Summe (Zählnummer) der resultierenden Attributtabelle zuordnet. Wenn Sie nach "Spatial Join in R" suchen, finden Sie auch hier auf GIS.Stackexchange zahlreiche Beispiele. Ich googelte schnell und fand zum Beispiel diesen Code auf einer Mailingliste.
Wenn Sie einen räumlichen Attribut-Join in QGIS erzielen möchten, gehen Sie wie folgt vor:
Wenn der Join irgendwie fehlschlägt (funktioniert bei mir nicht immer), bleiben Sie bei SEXTANTE und suchen Sie nach der SAGA-Toolbox, die auch sehr gute Join-Funktionen bietet.
quelle
R
sich bei auszeichnen. Die Verwendung von Shapefiles,rgdal
QGIS und Sextante ist ein bisschen wie die Empfehlung, dass jemand eine moderne automatisierte Industrieanlage anmietet, um zwei Boards zusammenzunageln :-).