Meine Frage bezieht sich auf das Extrahieren von Werten aus Rastern an der Position von Punkten. Mit der Funktion extrahieren ist dies sehr einfach, und die Funktion gibt mir einen Datenrahmen mit den Werten aller Variablen in den Punkten. Ich möchte in diesem Datenrahmen die Koordinaten jedes Punktes haben. Wie kann ich das erreichen? Kann man R sagen, dass beim Extrahieren der Werte aus dem Raster auch die Spalten des Positionspunkts hinzugefügt werden.
Dies ist meine Vorgehensweise:
presencias=read.table("c:/SDM_R/presencias/P_lentiscus_pres.csv",header=TRUE,sep=";")
lista_variables <-list.files(path="Variables_modelizacion/solo_ascii",pattern='*.asc',full.names=TRUE)
variables <- stack(lista_variables)
variables_presencia<-extract(variables, presencias)
Die Ergebnisse sind ungefähr so:
> bio1 bio12 bio18 bio2 bio4
> 90 875 165 95 4886
> 115 1085 158 83 4075
> 135 1153 153 67 3402
> 85 1026 137 99 5203
> 96 667 128 108 5823
> 98 531 109 113 6305
> 132 450 63 123 6598
> 132 569 104 106 5963
> 95 814 196 98 5571
> 146 474 39 114 6603
Ich möchte aber noch zwei Spalten mit den Koordinatendaten (es können aber auch andere Spalten aus meiner CSV-Tabelle zum Extrahieren von Positionen sein).
Vielen Dank.
presencias
?cbind(coordinates(presencias), variables_presencia)
? Sie können dann mithilfe von in SPDF konvertierencoordinates(result) <- ~ X + Y
und wieder die Vielzahl von Methoden verwenden, die für räumliche Objekte entwickelt wurden.Antworten:
Vorausgesetzt, dies
presencias
undvariables
dieselbe Projektion sollte eine leichte Aufgabe sein. Ich empfehle Ihnen, diese Codezeilen nach Ihrerread.table()
Anweisungpresencias
einzufügen , um DataFrame in ein SpatialPointsDataFrame-Objekt zu konvertieren (verfeinern Sie einfach die Namen der Spalten mit den x- und y-Koordinaten, wenn sie von meinem Beispiel abweichen).Um ein reproduzierbares Beispiel zu liefern, versuche ich, den Umfang meiner Antwort ein wenig weiter zu erschließen. Laden Sie zunächst dieses ESRI-Shapefile mit mehr oder weniger wichtigen Speicherorten in Deutschland herunter und entpacken Sie es . Diese dienen später als Punktdaten. Sie werden auch Pakete benötigen
dismo
,rgdal
undraster
für diese kurze Beispiel, so stellen Sie sicher , dass diese Bibliotheken (und alle ihre Abhängigkeiten) auf der lokalen Festplatte installiert sind.Beginnen wir mit dem Laden der erforderlichen Pakete.
Als Nächstes sollten Sie eine RasterLayer-Beispieldatei generieren. In unserem Fall werden wir die
gmap()
Funktion aus demdismo
Paket nutzen, um eine physische Deutschlandkarte zu erhalten.Sie können jetzt Ihr Punkt-Shapefile über
readOGR
aus demrgdal
Paket von R importieren . Stellen Sie sicher, dass Sie den Namen der Datenquelle anpassen (dsn = ...). Das gesamte Projektionsmaterial ist in Ihrem speziellen Fall veraltet. Dies muss jedoch in unserem Beispiel geschehen, um unsere Punktedaten erfolgreich mit dem Germany RasterLayer zu überlagern.Um die Größe unserer Punktedaten zu reduzieren, werden zehn Standorte in Deutschland zufällig ausgewählt. Dies sollte für unsere Zwecke ausreichen.
Jetzt, da die Vorbereitungen abgeschlossen sind, können wir gerade damit beginnen, die Werte dieser bestimmten Pixel zu extrahieren, in denen unsere zehn zufällig ausgewählten Punkte liegen.
Um die Punktkoordinaten mit den extrahierten Pixelwerten zusammenzuführen, müssen Sie lediglich einen Datenrahmen einrichten, der die Koordinaten unseres SpatialPointsDataFrame enthält. Das ist es!
quelle
Sicher können Sie einfach Folgendes tun:
variables_presencia$x <- presencias['x']
variables_presencia$y <- presencias['y']
(Vorausgesetzt, Ihre Koordinatendaten befinden sich in zwei Spalten mit den Namen "x" und "y".)
quelle