Dado un cuadro delimitador, ¿cómo puedo contar el número de valores específicos (por ejemplo, estoy interesado en el número de value == 1
) en un ráster en 1) arcpy, o 2) paquete ráster en R?
11
En R
, use crop
para extraer los valores y ( por ejemplo ) table
para contarlos.
Como ejemplo, creemos una cuadrícula de 1 grado que cubra el mundo:
library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)
El cuadro delimitador se convierte en un extent
objeto para usar crop
:
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
Una vez hecho esto, la tabulación es sencilla:
table(getValues(y.raster))
En esta salida, la primera fila enumera los valores y la segunda enumera sus conteos correspondientes:
165 166 167 ... 257 258
1 2 3 ... 2 1
Como verificación podemos trazar el ráster y la extensión:
plot(x.raster)
plot(y.extent, add=T)
Una adición menor: también podría usar la función "freq" (segura para la memoria):
Siguiendo la respuesta de whuber:
library(raster)
x.raster <- raster(outer(179:0, 0:359, '+'), xmn=-180, xmx=180, ymn=-90, ymx=90)
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
Pero ahora hazlo:
freq(y.raster)
Solo importa para objetos muy grandes (ráster en archivo). 'freq' devuelve una matriz de dos columnas (valor / recuento) mientras que 'tabla' devuelve una tabla.
crop
operación para una cuadrícula de un minuto que cubre la tierra: tiene 10800 filas y 21600 columnas (233,280,000 celdas). El cultivo se ejecutó en 1.36 segundos de tiempo total transcurrido.v <- extract(x.raster, y.extent)
seguido portable(v)
extract
? No forma parteraster
y elR
sistema de ayuda (??
) tampoco encuentra ninguna función con este nombre.