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

基于滑动窗口20年年龄区间蓄积占比的林分同龄/异龄分类方法

完全可以用滑动窗口实现该需求,核心实现逻辑如下:
对每个林分分组后先按年龄升序排序,以每个林木层的年龄为窗口左边界,统计所有年龄落在「左边界年龄 ~ 左边界年龄+20年」区间内的林木层总蓄积占比,只要所有窗口的最大占比超过80%,就判定为同龄林,否则为异龄林。

完整实现代码

library(dplyr)

df <- data.frame(stand = c("id1", "id1", "id1", "id1", 
                           'id2', 'id2', 'id2'),
                 strat = c(1,2,3,4,
                           1,2,3),
                 v = c(4,10,15,20,
                       11,15,18),
                 age = c(5,10,65,80,
                         10,15,20))

result <- df %>% 
  group_by(stand) %>%
  mutate(
    V_tot = sum(v),
    V_share = v/V_tot*100
  ) %>%
  # 分组计算每个林分的最大20年区间蓄积占比
  group_modify(~{
    ages <- .x$age
    shares <- .x$V_share
    # 遍历每个年龄作为左端点,计算对应20年区间的总占比,取最大值
    max_window_share <- max(sapply(ages, function(left_age){
      sum(shares[ages >= left_age & ages <= left_age + 20])
    }))
    .x$quality <- ifelse(max_window_share > 80, "even-aged", "uneven-aged")
    .x
  }) %>%
  ungroup()

结果验证

运行代码得到的输出和你给出的预期完全匹配:

  • id1的最大20年区间为65~85岁,对应蓄积占比为30.6%+40.8%=71.4%,未达到80%,判定为异龄林(uneven-aged)
  • id2的最大20年区间为10~30岁,对应蓄积占比100%,超过80%,判定为同龄林(even-aged)

该方案仅依赖你已经在用的dplyr包即可运行,不需要额外安装其他依赖,适配性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:48:03