You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何依据已有栅格的数值分布为新栅格生成随机单元格数值

按原栅格数值比例随机填充新栅格(terra包)

需求说明

现有一个terra包的栅格r,其中值1出现5次、值2出现15次、值3出现20次、值4出现60次,对应占比为5%、15%、20%、60%。需要创建一个尺寸不同的新栅格NEW.RASTER,并按照相同比例随机分配1-4的数值。

解决方案步骤

  • 提取原栅格的数值及对应出现频率,作为抽样权重
  • 根据新栅格的像素总数,按权重随机抽取对应数量的数值
  • 将抽样结果赋值给新栅格

完整代码实现

# 加载terra包(未加载时执行)
library(terra)

# 原栅格创建(用户提供代码)
r <- rast(ncol=10,nrow=10, vals=1)
r[6:20] <- 2
r[21:40] <- 3
r[41:100] <- 4

# 创建新栅格(用户提供代码)
NEW.RASTER <- rast(ncol=15,nrow=350)

# 提取原栅格数值与对应频次
freq_table <- freq(r)
target_values <- freq_table$value
sample_weights <- freq_table$count

# 计算新栅格总像素数
total_pixels <- ncell(NEW.RASTER)

# 按原比例随机抽样
random_values <- sample(target_values, size = total_pixels, replace = TRUE, prob = sample_weights)

# 赋值给新栅格
values(NEW.RASTER) <- random_values

# 可选:验证新栅格数值分布
freq(NEW.RASTER)

代码说明

  • freq(r):获取原栅格各数值的出现次数,生成包含数值和对应频次的表格
  • ncell(NEW.RASTER):计算新栅格的总像素量,确保抽样数量与栅格容量匹配
  • sample(..., prob = sample_weights):以原栅格数值的出现次数为权重抽样,保证新栅格数值占比与原栅格一致
  • values(NEW.RASTER) <- random_values:将抽样结果批量赋值给新栅格的所有像素

内容的提问来源于stack exchange,提问作者CARLOS_BEDSON

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:46:16