Biorąc pod uwagę obwiednię, jak mogę policzyć liczbę określonych wartości (powiedzmy, jestem zainteresowany liczbą value == 1
) w rastrze w 1) arcpy lub 2) pakiecie rastrowym w R?
11
W R
użyj, crop
aby wyodrębnić wartości i ( np. ) table
Je policzyć.
Na przykład stwórzmy siatkę 1 stopnia obejmującą glob:
library(raster)
x.raster <- raster(outer(179:0, 0:359, `+`), xmn=-180, xmx=180, ymn=-90, ymx=90)
Obwiednia jest konwertowana na extent
obiekt w celu użycia crop
:
y.extent <- extent(cbind(c(-125,20), c(-60,50)))
y.raster <- crop(x.raster, y.extent)
Po wykonaniu tej czynności zestawienie tabel jest proste:
table(getValues(y.raster))
W tym wyniku pierwszy wiersz zawiera wartości, a drugi ich odpowiadające liczby:
165 166 167 ... 257 258
1 2 3 ... 2 1
Jako czek możemy wykreślić raster i zakres:
plot(x.raster)
plot(y.extent, add=T)
Drobny dodatek: możesz również użyć (bezpiecznej pamięci) funkcji „freq”:
Po odpowiedzi 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)
Ale teraz wykonaj:
freq(y.raster)
Ma to znaczenie tylko w przypadku bardzo dużych obiektów (raster w pliku). „freq” zwraca macierz dwukolumnową (wartość / liczba), podczas gdy „table” zwraca tabelę.
crop
operację na jednominutową siatkę pokrywającą ziemię: ma 10800 rzędów i 21600 kolumn (233 280 000 komórek). Uprawa została wykonana w łącznym czasie, który upłynął 1,36 sekundy.v <- extract(x.raster, y.extent)
a następnietable(v)
extract
? Nie jest częścią,raster
aR
system pomocy (??
) również nie znajduje żadnej funkcji o tej nazwie.