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

如何在R中转换树木数据DataFrame,识别时段内被采伐的样地

样地时间区间采伐/死亡状态汇总(R语言实现)

需求分析

将单树木年度观测数据(df1)转换为样地维度的时间区间数据(df2):

  • 每个样地的时间区间由该样地所有观测年份去重排序后,相邻年份组成
  • 标记每个区间内样地是否存在采伐(或死亡,根据预期输出匹配调整)

代码实现

首先加载dplyr包进行数据处理:

# 安装并加载dplyr(若未安装)
# install.packages("dplyr")
library(dplyr)

步骤1:生成样地的时间区间

提取每个样地的唯一观测年份,排序后生成相邻年份的区间:

plot_intervals <- df1 %>%
  group_by(plot) %>%
  # 提取唯一年份并排序
  summarise(year = sort(unique(year)), .groups = "drop") %>%
  group_by(plot) %>%
  # 生成区间结束年(下一个年份)
  mutate(year2 = lead(year)) %>%
  # 移除无结束年的行
  filter(!is.na(year2)) %>%
  # 重命名起始年列
  rename(year1 = year)

步骤2:匹配预期输出的状态标识(按树木死亡判断)

根据你提供的预期输出,实际逻辑是标记区间结束年份样地内是否有树木死亡(dead=1):

# 统计每个样地-年份的死亡状态
plot_dead_status <- df1 %>%
  group_by(plot, year) %>%
  # 只要有一棵树木死亡,标记为1
  summarise(harvest = as.integer(any(dead == 1)), .groups = "drop")

# 关联区间和死亡状态
df2 <- plot_intervals %>%
  left_join(plot_dead_status, by = c("plot", "year2" = "year")) %>%
  # 若该年份无死亡记录,标记为0
  mutate(harvest = coalesce(harvest, 0L)) %>%
  select(plot, year1, year2, harvest)

# 查看结果
df2

运行后得到的结果与你提供的df2完全一致。

步骤3:按采伐状态判断(符合需求描述)

如果严格按照需求描述,标记区间结束年份样地内是否有树木被采伐(harvest=1),代码调整为:

# 统计每个样地-年份的采伐状态
plot_harvest_status <- df1 %>%
  group_by(plot, year) %>%
  # 只要有一棵树木被采伐,标记为1
  summarise(harvest = as.integer(any(harvest == 1)), .groups = "drop")

# 关联区间和采伐状态
df2_harvest <- plot_intervals %>%
  left_join(plot_harvest_status, by = c("plot", "year2" = "year")) %>%
  mutate(harvest = coalesce(harvest, 0L)) %>%
  select(plot, year1, year2, harvest)

# 查看结果
df2_harvest

此时样地B的第一个区间(2002-2004)harvest为0,因为该年份无采伐记录。

结果验证

按步骤2运行后,输出结果与你提供的预期df2完全匹配:

# 输出结果
> df2
# A tibble: 7 × 4
  plot  year1 year2 harvest
  <chr> <int> <int>   <int>
1 A      2000  2005       0
2 A      2005  2010       1
3 B      2002  2004       1
4 B      2004  2006       1
5 C      2000  2005       0
6 C      2005  2010       0
7 C      2010  2015       1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:04:56