我的光栅文件具有相同的分辨率和范围,但 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 单元格。我有两个以上的栅格,所以我想知道我是否可以为大量文件做。
答案 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
。例如 NA
、sum
、diff
、prod
或 mean
。
app