Mi pregunta es sobre la extracción de valores de rásteres en la ubicación de los puntos. Con la función de extracción, esto es muy fácil, y la función me da un marco de datos con los valores de todas las variables en los puntos. Quiero tener en ese marco de datos las coordenadas de cada punto. ¿Cómo puedo hacer que eso suceda? ¿Es posible decirle a R que al extraer los valores del ráster también se agregan las columnas del punto de ubicación?
Este es mi procedimiento:
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)
los resultados son algo como estos:
> 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
Pero quiero dos columnas más con los datos de coordenadas (pero podrían ser otras columnas de mi tabla de ubicación de extracción de csv).
Muchas gracias.
presencias
?cbind(coordinates(presencias), variables_presencia)
? Luego puede convertir a SPDF usandocoordinates(result) <- ~ X + Y
y puede usar la gran cantidad de métodos diseñados para objetos espaciales nuevamente.Respuestas:
Asumiendo eso
presencias
yvariables
compartiendo la misma proyección, esta debería ser una tarea fácil. Le recomiendo que agregue estas líneas de código después de suread.table()
declaración para convertir elpresencias
marco de datos en un objeto SpatialPointsDataFrame (solo refine los nombres de las columnas que contienen las coordenadas xey si difieren de mi ejemplo).Para proporcionar un ejemplo reproducible, trato de abrir un poco más el alcance de mi respuesta. En primer lugar, descargue y descomprima este archivo de forma ESRI con ubicaciones más o menos importantes en Alemania. Estos servirán como datos puntuales más adelante. También necesitará paquetes
dismo
,rgdal
yraster
para este breve ejemplo, asegúrese de que estas bibliotecas (y todas sus dependencias) estén instaladas en su disco duro local.Comencemos cargando los paquetes requeridos.
A continuación, debe generar una muestra RasterLayer. En nuestro caso, haremos uso de la
gmap()
función deldismo
paquete para obtener un mapa físico de Alemania.Ahora puede importar su archivo de forma de puntos a través
readOGR
delrgdal
paquete de R. Asegúrese de ajustar el nombre de la fuente de datos (dsn = ...). Todo el material de proyección es obsoleto en su caso particular. Sin embargo, debe hacerse en nuestro ejemplo para superponer con éxito nuestros datos de puntos con el RasterLayer de Alemania.Para reducir el enorme tamaño de nuestros datos de puntos, extraeremos una muestra aleatoria de diez ubicaciones en Alemania. Esto debería ser suficiente para nuestros propósitos.
Ahora que el material de preparación ha finalizado, podríamos comenzar a extraer los valores de esos píxeles particulares en los que se encuentran nuestros diez puntos muestreados al azar.
Para fusionar las coordenadas del punto con los valores de píxeles extraídos, solo necesitamos configurar un marco de datos que contenga las coordenadas de nuestro SpatialPointsDataFrame. ¡Eso es!
fuente
Seguramente puedes hacer:
variables_presencia$x <- presencias['x']
variables_presencia$y <- presencias['y']
(suponiendo que sus datos de coordenadas estén en dos columnas llamadas 'x' e 'y')
fuente