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

如何基于二维物种映射提取四维stars数组的对应时序数据?

基于物种映射提取stars数据集对应时间序列

需求背景

我们有一个四维时空stars数据集dat(维度:x,y,year,tree_species),包含4种树种的年度变量值;同时有一个二维物种映射species_map,记录每个(x,y)像素对应的树种。需要逐像素提取匹配树种的年度时间序列,最终得到一个三维(x,y,year)的stars对象。

解决方案(基础R命令实现)

利用数组索引直接提取对应数据,步骤如下:

  1. 获取树种维度的位置索引
    将species_map中的因子类型树种转换为dat中树种维度对应的位置(1-4,对应"bu","fi","ki","ei"):

    # 获取每个像素对应的树种在dat中的维度位置
    species_idx <- as.integer(species_map$tree_species)
    
  2. 构建三维索引矩阵
    将二维的树种索引扩展为三维(匹配x,y,year的维度),每个像素对应所有年份的树种索引:

    # 重复树种索引5次(对应5个年份),调整维度为(10,10,5)
    idx_3d <- array(rep(species_idx, each = 5), dim = c(10,10,5))
    
  3. 提取对应数据并重构数组
    生成所有x,y,year的位置组合,结合树种索引从dat中提取数据,再重构为三维数组:

    # 生成x,y,year的所有位置组合
    grid <- expand.grid(x = 1:10, y = 1:10, year = 1:5)
    # 组合索引并提取数据
    extracted_data <- dat$data_val[cbind(grid$x, grid$y, grid$year, as.vector(idx_3d))]
    # 重构为三维数组
    extracted_array <- array(extracted_data, dim = c(10,10,5))
    
  4. 转换为stars对象并设置维度信息
    将重构后的数组转为stars对象,复用原数据集的维度属性:

    # 创建三维stars对象
    result <- st_as_stars(extracted_array) |>
      setNames("data_val") |>
      st_set_dimensions(names = c("x","y","year")) |>
      # 复用原dat的年份维度值
      st_set_dimensions("year", values = st_get_dimensions(dat)$year$values) |>
      # 复用原dat的x、y维度信息
      st_set_dimensions(c("x","y"), values = st_get_dimensions(dat)[c("x","y")])
    
  5. 验证结果
    查看维度或绘图确认结果:

    # 查看维度信息
    st_dimensions(result)
    # 绘制2018年的结果
    plot(result[, , 1])
    

关键说明

  • 利用基础R数组索引机制,避开了ifelse等操作的维度不匹配问题
  • 通过构建四维索引矩阵,直接从原四维数组提取对应位置数据,保证逐像素匹配的准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 04:05:22