Ma question concerne l'extraction des valeurs des rasters à l'emplacement des points. Avec l'extrait de fonction, c'est très facile, et la fonction me donne une trame de données avec les valeurs de toutes les variables dans les points. Je veux avoir dans cette trame de données les coordonnées de chaque point. Comment puis-je y arriver? Est-il possible de dire à R que lors de l'extraction des valeurs du raster, ajoutez également les colonnes du point de localisation.
Voici ma procédure:
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)
les résultats sont quelque chose comme ceci:
> 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
Mais je veux deux autres colonnes avec les données de coordonnées (mais il pourrait y avoir d'autres colonnes de ma table de localisation d'extraction csv).
Merci beaucoup.
presencias
?cbind(coordinates(presencias), variables_presencia)
? Vous pouvez ensuite convertir en SPDF à l'aidecoordinates(result) <- ~ X + Y
et vous pouvez utiliser à nouveau la pléthore de méthodes conçues pour les objets spatiaux.Réponses:
En supposant cela
presencias
etvariables
partageant la même projection, cela devrait être une tâche facile. Je vous recommande d'ajouter ces lignes de code après votreread.table()
instruction afin de convertirpresencias
dataframe en un objet SpatialPointsDataFrame (affinez simplement les noms des colonnes contenant les coordonnées x et y si elles diffèrent de mon exemple).Pour fournir un exemple reproductible, j'essaie d'ouvrir un peu plus le champ de ma réponse. Tout d'abord, téléchargez et décompressez ce fichier de formes ESRI avec des emplacements plus ou moins importants en Allemagne. Celles-ci serviront de données ponctuelles ultérieurement. Vous aurez également besoin de packages
dismo
,rgdal
etraster
pour ce court exemple, assurez-vous que ces bibliothèques (et toutes leurs dépendances) sont installées sur votre disque dur local.Commençons par charger les packages requis.
Ensuite, vous devez générer un exemple de RasterLayer. Dans notre cas, nous utiliserons la
gmap()
fonction dudismo
package afin d'obtenir une carte physique de l'Allemagne.Vous pouvez maintenant importer votre fichier de formes de points via
readOGR
lergdal
package de R. Veillez à ajuster le nom de la source de données (dsn = ...). L'ensemble de la projection est obsolète dans votre cas particulier. Cependant, cela doit être fait dans notre exemple afin de superposer avec succès nos données de point avec le RasterLayer d'Allemagne.Pour réduire la taille énorme de nos données ponctuelles, nous allons tirer un échantillon aléatoire de dix sites en Allemagne. Cela devrait suffire à nos fins.
Maintenant que la préparation est terminée, nous pourrions commencer à extraire les valeurs de ces pixels particuliers dans lesquels se trouvent nos dix points échantillonnés au hasard.
Afin de fusionner les coordonnées du point avec les valeurs de pixels extraites, nous avons juste besoin de configurer une trame de données contenant les coordonnées de notre SpatialPointsDataFrame. C'est ça!
la source
Vous pouvez sûrement simplement faire:
variables_presencia$x <- presencias['x']
variables_presencia$y <- presencias['y']
(en supposant que vos données de coordonnées sont dans deux colonnes appelées «x» et «y»)
la source