Étant donné une boîte englobante, comment puis-je compter le nombre de valeurs spécifiques (disons, je suis intéressé par le nombre de value == 1
) dans un raster dans 1) arcpy, ou 2) un package raster dans R?
11
Dans R
, utilisez crop
pour extraire les valeurs et ( par exemple ) table
pour les compter.
À titre d'exemple, créons une grille de 1 degré couvrant le globe:
library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)
La boîte englobante est convertie en extent
objet afin d'utiliser crop
:
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
Cela fait, la tabulation est simple:
table(getValues(y.raster))
Dans cette sortie, la première ligne répertorie les valeurs et la seconde répertorie leurs nombres correspondants:
165 166 167 ... 257 258
1 2 3 ... 2 1
Pour vérifier, nous pouvons tracer le raster et l'étendue:
plot(x.raster)
plot(y.extent, add=T)
Un ajout mineur: vous pouvez également utiliser la fonction (sans danger pour la mémoire) "freq":
Suite à la réponse 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)
Mais maintenant:
freq(y.raster)
Cela ne concerne que les très gros objets (raster sur fichier). 'freq' renvoie une matrice à deux colonnes (valeur / nombre) tandis que 'table' renvoie une table.
crop
opération pour une grille d'une minute couvrant la terre: elle a 10800 lignes et 21600 colonnes (233 280 000 cellules). Le recadrage a été exécuté en 1,36 secondes de temps total écoulé.v <- extract(x.raster, y.extent)
suivi detable(v)
extract
? Cela ne fait pas partieraster
et leR
système d'aide (??
) ne trouve pas non plus de fonction avec ce nom.