如何统一栅格堆栈中非 NA 单元的数量?

时间:2021-05-18 18:33:21

标签: r raster r-raster

我的光栅文件具有相同的分辨率和范围,但 NA 的数量不同。我想统一它们之间的 NA 数量。如果所有栅格文件中的单元格都不是 NA,是否可以通过将单元格视为非 NA 来做到这一点?

这里有一个例子:

analysis.py

我希望 library(raster) library(terra) f <- system.file("external/test.grd", package="raster") r1 <- raster(f) r2 <- calc(r1, fun=function(x){ x[x < 500] <- NA; return(x)} ) r1 <- calc(r1, fun=function(x){ x[x > 1200] <- NA; return(x)} ) raste <- rast(r1) rNA <- terra:: global(!(is.na(raste)), sum, na.rm=TRUE) print(paste0("Non-NA of r1", rNA)) raste <- rast(r2) rNA <- terra:: global(!(is.na(raste)), sum, na.rm=TRUE) print(paste0("Non-NA of r2", rNA)) r1 具有相同数量的非 NA 单元格。我有两个以上的栅格,所以我想知道我是否可以为大量文件做。

1 个答案:

答案 0 :(得分:1)

同时使用 raster 和 terra 可能有点混乱,所以我将只使用 terra(但您可以对 raster 执行相同的操作,使用 stack 代替 { {1}} 和 c 代替 cellStats

您的示例数据

global

解决方案:

library(terra)
f <- system.file("external/test.grd", package="raster")
r <- rast(f)
r1 <- clamp(r, upper=1200, values=FALSE)
r2 <- clamp(r, lower=500, values=FALSE)

global(!(is.na(r1)), sum)
#       sum
#lyr.1 3145
global(!(is.na(r2)), sum)
#      sum
#lyr.1 802

我喜欢使用 r <- c(r1, r2) names(r) <- c("r1", "r2") m <- any(is.na(r)) x <- mask(r, m, maskvalue=1) global(!(is.na(x)), sum, na.rm=TRUE) # sum #r1 769 #r2 769 ,因为它清楚地表明了意图。

但是您可以通过许多其他方式之一组合这些层。只要您不使用 any(is.na()),其中一层中带有 na.rm=TRUE 的单元格将在输出中显示为 NA。例如 NAsumdiffprodmean

app
相关问题