我有一个关于方法论的问题。所以我有两个光栅。一个光栅来自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