Как заменить NA в растровом объекте

Мне нужно заменить NA в растровом объекте (r) из приведенного ниже примера.

library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)

Я также попытался удалить их (и поместить результат в data.frame), но безрезультатно.

dfr <- as.data.frame(r, na.rm=T)
summary(dfr)
# test       
# Min.   : 128.4  
# 1st Qu.: 293.2  
# Median : 371.4  
# Mean   : 423.2  
# 3rd Qu.: 499.8  
# Max.   :1805.8  
# NA   :6097

Ответ 1

Я не уверен, что имеет смысл удалить значения NA из объекта raster, но вы можете легко его заменить.

Например:

oldpar <- par(mfrow=c(1, 2))
plot(r)
r[is.na(r)] <- 250
plot(r)
par(oldpar)

enter image description here


Если вы действительно этого хотите, вы можете извлечь растровые значения в вектор, а затем удалить значения NA. (Хотя, поскольку вы теряете пространственную информацию, я не вижу, как это может быть полезно.)

r <- raster(filename)

r <- values(r)
head(r)
[1] NA NA NA NA NA NA

head(na.omit(r))
[1] 633.686 712.545 654.162 604.442 857.256 755.506

Ответ 2

Более безопасный для хранения данных подход (для больших файлов) должен был бы использовать реклассификацию:

library(raster)
filename <- system.file("external/test.grd", package="raster")
r <- raster(filename)
rna <- reclassify(r, cbind(NA, 250))