Daha çox

R istifadə edərək raster yığınının vəziyyətinə və digər təbəqələrə əsaslanaraq yenidən təsnifləşdirilməsi?


Rasteri yenidən təsnif etmək istəyirəmr1aşağıdakı formada:

  • -dan böyük olan bütün dəyərlərr2olmaq1
  • -dan az olan bütün dəyərlərr3olmaq0
  • Qalan dəyərlərin hamısı bərabər olmalıdırr4

İlk iki şərt üçün dəyərləri təyin etmək üçün örtükdən istifadə edirəm, üçüncüsü üçün bunu edə bilmirəm. Bütün bunları bir işə necə qoyacağımı bilmək də maraqlıdır.

kitabxana (raster) r1 <- raster (nrow = 5, ncol = 5) r1 <- setValues ​​(r1, runif (ncell (r1))) r2 <- setValues ​​(r1, runif (25, 0.6,0.9)) r3 < - setValues ​​(r1, runif (25, 0.2,0.4)) r4 <- setValues ​​(r1, runif (25, 1,2)) x <- overlay (r1, r2, fun = function (x, y) {x [ x> y] <- 1; x}) x2 <- örtük (x, r3, əyləncə = funksiya (x, y) {x [x

Bunu vektorlaşdırılmış bir işə salmaq üçün ifelse istifadə edə bilərsiniz. Rasterlərinizi yığsanız, yenidən təsnifatı hissə-hissə açmağınıza ehtiyac yoxdur və yığına bir funksiya tətbiq edə bilərsiniz.

Məlumat hazırlayın

kitabxana (raster) r1 <- raster (nrow = 5, ncol = 5) r <- yığın (setValues ​​(r1, runif (ncell (r1))), setValues ​​(r1, runif (25, 0.6,0.9)), setValues (r1, runif (25, 0.2,0.4)), setValues ​​(r1, runif (25, 1,2)))

Yenidən təsnif etmə funksiyasını yazın

rc <- funksiyası (x1, x2, x3, x4) {ifelse (x1> x2, 1, ifelse (x1 

Raster yığına funksiyanı tətbiq edin

r.class <- örtük (r, əyləncə = rc)

Mötərizə çıxarış operatorları R-də rasters üzərində işləyirlər. Beləliklə setValues ​​və ya overlay istifadə etməyinizə ehtiyac yoxdur. Bunu edərdim:

r1 [r1> r2] <- 1 r1 [r1  r2 | r1  r2 | r1 

Bütün rasterləriniz eyni dərəcədə və qətiyyətlidirsə, bu işləməlidir.