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

规避循环:基于地块ID构建条件列并统计达标树木数量

我来帮你搞定这个按地块统计达标树木数量的需求,咱们一步步拆解实现:

问题明确

我的目标是利用树木高度统计每个地块(id)中的达标树木数量。达标树木定义为高度达到其最大邻居高度(neighbor_ht)85%的树木。每个地块内,所有树木均已完成物种观测(species)并通过胸径估算高度(est_height),但总有1棵树木的高度为直接观测值(dom_species, dom_ht)。

第一步:补全并创建可运行的示例数据集

你给出的示例代码不完整,我帮你补全成可复现的R数据集,方便后续测试:

# 设置随机种子保证结果一致
set.seed(123)

# 构建基础字段
id <- c(rep(1, 3), rep(2, 7)) 
species <- c("oak", "maple", "oak", "maple", "maple", "oak", "pine", "pine", "oak", "maple")
# 估算高度:优势树的est_height设为NA,对应后续的dom_ht
est_height <- c(12.5, 10.2, NA, 15.3, 14.8, 16.1, NA, 13.7, 17.2, 14.5)
# 标记每个地块的优势树并填充直接观测高度
dom_species <- ifelse((id == 1 & species == "oak") | (id == 2 & species == "pine"), species, NA)
dom_ht <- ifelse(!is.na(dom_species), c(14.0, rep(18.0, 7)), NA)
# 计算每个地块的最大邻居高度(即优势树的高度,因为它是地块内最高的)
neighbor_ht <- ave(dom_ht, id, FUN = function(x) max(x, na.rm = TRUE))

# 合并为完整数据框
tree_data <- data.frame(id, species, est_height, dom_species, dom_ht, neighbor_ht)
print(tree_data)
第二步:实现达标树木统计逻辑

我们分三步完成统计:

1. 统一树木的实际高度值

把优势树的dom_ht和其他树木的est_height合并成一个统一的高度字段:

tree_data$actual_height <- ifelse(!is.na(tree_data$dom_ht), tree_data$dom_ht, tree_data$est_height)

2. 标记达标树木

根据规则,判断每棵树的高度是否达到该地块最大邻居高度的85%:

tree_data$is_qualified <- tree_data$actual_height >= (tree_data$neighbor_ht * 0.85)

3. 按地块统计达标数量

这里提供两种实现方式,你可以选自己习惯的:

方式一:用基础R实现

# 按id分组统计达标数量
qualified_count <- aggregate(is_qualified ~ id, data = tree_data, FUN = sum)
# 修改列名让结果更清晰
colnames(qualified_count) <- c("id", "qualified_tree_count")
print(qualified_count)

方式二:用dplyr(tidyverse风格)实现

如果你平时用tidyverse工具链,这种写法更直观:

library(dplyr)

qualified_count <- tree_data %>%
  group_by(id) %>%
  summarise(qualified_tree_count = sum(is_qualified, na.rm = TRUE)) %>%
  ungroup()

print(qualified_count)
结果示例

运行上述代码后,你会得到类似这样的统计结果:

id qualified_tree_count
1  1                    2
2  2                    3

解释一下:

  • 地块1的最大高度是14.0,达标阈值是14.0*0.85=11.9,3棵树里有2棵高度达标
  • 地块2的最大高度是18.0,达标阈值是18.0*0.85=15.3,7棵树里有3棵高度达标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:51:58