r-获得两个光栅的相同像素



我有一个关于方法论的问题。所以我有两个光栅。一个光栅来自2018年,另一个来自2019年。现在我想看看2018年的相同像素是否也会出现在2019年。所以我只想知道在接下来的一年里,同样的像素是否还能再次出现。到目前为止,我会通过转换2018年的价值观来实现这一点​​转换为1和NA,然后将2018光栅乘以2019。所以所有相同的像素都将在2019年保留,并且与NA不相同。至少这是我的理论。

我的问题是,是否没有一个包或更优雅的方法来找出这两个光栅的共同点?

提前感谢

查看?terra::all.equal:

比较两个SpatRaster是否(接近(相等。首先比较对象的属性。如果这些是相同的,也会比较光栅单元的一个(可能是小的(样本。使用的样本大小可以通过maxcell参数来增加。您可以将其设置为Inf,但对于大型光栅,您的计算机可能没有足够的内存

示例:

library(terra)
#> terra 1.6.7
x <- sqrt(1:100)
mat <- matrix(x, 10, 10)
r1 <- rast(nrows=10, ncols=10, xmin=0, vals = x)
r2 <- rast(nrows=10, ncols=10, xmin=0, vals = mat)
all.equal(r1, r2)
#> [1] "Component "lyr.1": Mean relative difference: 0.3858482"
all.equal(r1, r1*1)
#> [1] TRUE

这听起来像是一种方法,应该适用于您的问题,而不必手动重新分类。

示例数据

library(terra)
s <- rast(system.file("ex/logo.tif", package="terra"))   
r1 <- s[[1]]
set.seed(0)
r1[sample(ncell(r1), 1000)] <- NA
r2 <- s[[2]]
r2[sample(ncell(r2), 1000)] <- NA

你的问题不是很清楚。为了确保两个光栅在相同的单元格中都有值或NA,可以进行

r <- c(r1, r2)
m <- sum(r)
x <- mask(r, m)

要比较两个光栅中的值,可以执行

rc <- r1 == r2

要找出相同的细胞是否为NA,可以进行

xna <- is.na(r) |> sum()

您得到的值为0(从不NA(、1(一年内NA(和2(始终NA(。如果你想区分";1〃;如果你想知道哪一年是NA,你可以做

u <- is.na(r) |> unique(as.raster=TRUE)

CCD_ 2具有四种情况";0_ 0";从不NA等。请参阅

cats(u)[[1]]
#  ID label red green
#1  0   0_0   0     0
#2  1   0_1   0     1
#3  2   1_0   1     0
#4  3   1_1   1     1

freq(u)
#  layer value count
#1     1   0_0  5905
#2     1   0_1   872
#3     1   1_0   872
#4     1   1_1   128

相关内容

  • 没有找到相关文章

最新更新