R语言 如何替换栅格对象中的NA

lsmd5eda  于 2023-04-09  发布在  其他
关注(0)|答案(2)|浏览(145)

我需要从下面的例子中替换光栅对象(r)中的NA

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's   :6097
dgsult0t

dgsult0t1#

以下是使用terra执行此操作的三种方法

library(terra)
f <- system.file("ex/elev.tif", package="terra")
r <- rast(f)
x <- classify(r, cbind(NA, -99))
y <- subst(r, NA, -99)
z <- ifel(is.na(r), -99, r)

对于raster,最好的(内存安全的方法,也适用于大文件)是使用reclassify:

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

4xrmg8kj2#

我不确定从raster对象中删除NA值是否有意义,但您可以轻松地替换它。
例如:

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

如果你真的愿意,你可以将栅格值提取到一个向量中,然后删除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

相关问题