如何根据另一个栅格相同值的分布生成随机栅格像元值

问题描述 投票:0回答:1

在 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) 
random terra
1个回答
0
投票

您可以获得等于新栅格中像素数的样本,仅包含感兴趣的值 (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
© www.soinside.com 2019 - 2024. All rights reserved.