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

如何筛选连续测量周期:永久样地多复测数据处理

筛选永久样地第二轮复测(t2)数据的解决方案

需求回顾

已通过以下代码筛选出永久样地的初始测量(t1)数据:

df_Time1 <- df %>% group_by(State, County, Plot) %>%  slice(which.min(Cycle))

需要进一步筛选t2数据:即对应样地中,比t1的Cycle或Measured_year大一轮的复测记录。针对复测次数num_obs > 2且Measured_year与Cycle间隔不一致的样地,以下提供两种常见场景的实现方案。

数据示例

library(tibble)
df <- tribble(
  ~State, ~County, ~Plot, ~Measured_year, ~basal_area, ~tph, ~Cycle, ~num_obs,
  1,      1,       1,     2006,           10,          10,   8,      2,
  2,      1,       2,     2002,           20,          20,   7,      3,
  1,      1,       1,     2009,           30,          30,   9,      2,
  2,      1,       1,     2005,           40,          40,   6,      3,
  2,      1,       1,     2010,           50,          50,   8,      3,
  2,      1,       2,     2013,           60,          60,   10,     2,
  2,      1,       2,     2021,           70,          70,   12,     3,
  2,      1,       1,     2019,           80,          80,   13,     3
)

方案1:取t1之后的第一次复测

适用于“大一轮”定义为紧随初始测量之后的首次复测,无需考虑间隔是否一致:

基于Cycle筛选

library(dplyr)

df_Time2 <- df %>%
  group_by(State, County, Plot) %>%
  # 计算每个记录与t1的Cycle差值
  mutate(cycle_diff = Cycle - min(Cycle)) %>%
  # 筛选差值最小且大于0的记录(即t1的下一轮)
  filter(cycle_diff == min(cycle_diff[cycle_diff > 0])) %>%
  ungroup()

基于Measured_year筛选

如果优先用年份判断:

df_Time2 <- df %>%
  group_by(State, County, Plot) %>%
  mutate(year_diff = Measured_year - min(Measured_year)) %>%
  filter(year_diff == min(year_diff[year_diff > 0])) %>%
  ungroup()

方案2:取与t1间隔等于第一轮间隔的复测

适用于“大一轮”定义为与初始测量的间隔等于t1到首次复测的间隔(即使后续复测间隔不一致,仍以第一轮间隔为标准):

基于Cycle间隔筛选

df_Time2 <- df %>%
  group_by(State, County, Plot) %>%
  # 获取t1的Cycle值,按Cycle排序后计算相邻间隔
  mutate(t1_cycle = min(Cycle)) %>%
  arrange(Cycle) %>%
  mutate(cycle_interval = lead(Cycle) - Cycle) %>%
  # 计算目标Cycle:t1 + 第一轮间隔
  mutate(target_cycle = t1_cycle + cycle_interval[Cycle == t1_cycle]) %>%
  # 匹配目标Cycle的记录
  filter(Cycle == target_cycle) %>%
  ungroup() %>%
  # 清理临时计算列
  select(-t1_cycle, -cycle_interval, -target_cycle)

基于Measured_year间隔筛选

如果优先用年份间隔判断:

df_Time2 <- df %>%
  group_by(State, County, Plot) %>%
  mutate(t1_year = min(Measured_year)) %>%
  arrange(Measured_year) %>%
  mutate(year_interval = lead(Measured_year) - Measured_year) %>%
  mutate(target_year = t1_year + year_interval[Measured_year == t1_year]) %>%
  filter(Measured_year == target_year) %>%
  ungroup() %>%
  select(-t1_year, -year_interval, -target_year)

自定义调整

如果“大一轮”是固定间隔(比如每5年/每2个Cycle一轮),可直接修改目标值的计算逻辑,例如:

# 固定Cycle间隔为2
df_Time2 <- df %>%
  group_by(State, County, Plot) %>%
  filter(Cycle == min(Cycle) + 2) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:22:45