在 terra 中,我有一个现有栅格,其值范围从 1 到 4,比例如下。
“1”出现5次; “2”15次; “3”20次; “4”60次
我需要创建一个具有不同形状和范围的新栅格,并以与前一个栅格相同的出现比例随机分配相同的值 1 到 4。
如何填充 NEW.RASTER?
r <- rast(ncol=10,nrow=10, vals=1)
> r[6:20] <- 2
> r[21:40]<-3
> r[41:100] <- 4
> r
class : SpatRaster
dimensions : 10, 10, 1 (nrow, ncol, nlyr)
resolution : 36, 18 (x, y)
extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84)
source(s) : memory
name : lyr.1
min value : 1
max value : 4
> freq(r)
layer value count
1 1 1 5
2 1 2 15
3 1 3 20
4 1 4 60
>
> NEW.RASTER <- rast(ncol=15,nrow=350)
> NEW.RASTER
class : SpatRaster
dimensions : 350, 15, 1 (nrow, ncol, nlyr)
resolution : 24, 0.5142857 (x, y)
extent : -180, 180, -90, 90 (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (CRS84) (OGC:CRS84)
您可以获得等于新栅格中像素数的样本,仅包含感兴趣的值 (1:4),并使用原始栅格中的比例作为概率权重。然后你只需要将它们分配给新的栅格即可。
library(terra)
# Get frequencies and calculate their proportion
df_f <- freq(r)
tot <- sum(df_f$count)
df_f$prop <- df_f$count/tot
df_f
# layer value count prop
#1 1 1 5 0.05
#2 1 2 15 0.15
#3 1 3 20 0.20
#4 1 4 60 0.60
# Get number of pixels in the new rasters
npix <- ncell(NEW.RASTER)
# Sample the values of interest
set.seed(8)
vals <- sample(df_f$value, npix, replace = TRUE, prob = df_f$prop)
# Calculate new proportions just to check (they will be closely similar)
df <- as.data.frame(table(vals))
df$prop <- df$Freq/npix
df
# vals Freq prop
#1 1 270 0.05142857
#2 2 790 0.15047619
#3 3 1072 0.20419048
#4 4 3118 0.59390476
# Assign the values to the new raster
values(NEW.RASTER)<-vals