создать новый растр из растра используя оператор if в R - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть растровый слой, показывающий SST в настоящее время, но показывающий только те пиксели, которые, как я знаю, являются подходящей средой обитания для вида. Все остальные пиксели установлены как NA.

Теперь у меня есть тот же растровый слой, но показывающий прогнозируемый SST на 2050 год. В этом растровом слое все пиксели имеют значение (кроме NA на поверхности земли).

Теперь я хочу сделать следующее: я хочу найти во втором растровом слое значения, заданные в первом растровом слое, и установить все остальные значения 0. Таким образом, результатом должен быть растр, показывающий только пиксели, значения которых также могут быть найденным в первом растре.

Я думаю, что правильная функция будет if else function.

Есть ли способ использовать все значения растра в функции if else? Тогда код должен выглядеть примерно так:

    if(raster1==raster2){
      raster3 <- 1
      }else{
      raster3 <- 0
      }

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

При задании вопроса всегда включайте некоторые примеры данных, чтобы получить минимальный автономный воспроизводимый пример.

library(raster)
s <- r <- raster(ncol=5, nrow=5)
values(r) <- rep(c(1,NA,1,NA,1), 5)
values(s) <- 1:25

Вы можете делать то, что вам нужно (установите все значения в s, где r означает NA, равным 0), как это

x <- mask(s, r, updatevalue=0)

Вы также можете использовать алгебру

y <- (!is.na(r)) * s

На самом деле существует (скрытый) метод ifel, но он менее эффективен

z <- raster:::.ifel(!is.na(r), s, 0)
0 голосов
/ 23 апреля 2020

Я нашел ответ на свой вопрос. Если у кого-то есть такая же проблема:

    check <- raster2<maxValue(raster1)
    raster_final <- check*raster2
    raster_final_2 <- mask(raster2, check, maskvalue=0)
    raster_final_3 <- crop(raster_final_2, raster1)
    raster_final_4 <- mask(raster_final_3, raster1)
...