Dada uma caixa delimitadora, como posso contar o número de valores específicos (por exemplo, estou interessado no número de value == 1
) em uma varredura em 1) arcpy ou 2) pacote raster em R?
11
Em R
, use crop
para extrair os valores e ( por exemplo ) table
para contá-los.
Como exemplo, vamos criar uma grade de 1 grau cobrindo o globo:
library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)
A caixa delimitadora é convertida em um extent
objeto para usar crop
:
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
Feito isso, a tabulação é direta:
table(getValues(y.raster))
Nesta saída, a primeira linha lista os valores e a segunda lista suas contagens correspondentes:
165 166 167 ... 257 258
1 2 3 ... 2 1
Como verificação, podemos traçar a varredura e a extensão:
plot(x.raster)
plot(y.extent, add=T)
Uma pequena adição: você também pode usar a função (segura para a memória) "freq":
Seguindo a resposta do 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)
Mas agora faça:
freq(y.raster)
É importante apenas para objetos muito grandes (varredura em arquivo). 'freq' retorna uma matriz de duas colunas (valor / contagem) enquanto 'tabela' retorna uma tabela.
crop
operação para uma grade de um minuto cobrindo a terra: possui 10800 linhas e 21600 colunas (233.280.000 células). A colheita foi executada em 1,36 segundos no tempo total decorrido.v <- extract(x.raster, y.extent)
seguido portable(v)
extract
? Isso não faz parteraster
e oR
sistema de ajuda (??
) também não encontra nenhuma função com esse nome.