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

如何从冲突年龄组计算动物个体的最小数值年龄?

解决方案

要计算每个观测个体的最小数值年龄,核心逻辑是基于个体首次捕获的年龄基准,结合后续年份与首次年份的差值推导(每年年龄增长1岁)。以下是修正后的完整代码:

library(dplyr)

# 先确保Year为整数类型(避免字符型计算错误)
Data <- Data %>% mutate(Year = as.integer(Year))

# 按个体ID分组计算最小数值年龄
Data <- Data %>%
  group_by(ID) %>%
  mutate(
    # 确定个体首次捕获的最小基准年龄
    base_age = case_when(
      first(Age_Class) == "1CY" ~ 0,
      first(Age_Class) == "2CY" ~ 1,
      first(Age_Class) == ">1CY" ~ 1,
      first(Age_Class) == ">2CY" ~ 2
    ),
    # 计算当前观测的最小数值年龄:基准年龄 + 年份差
    Age_Numeric = base_age + (Year - first(Year))
  ) %>%
  select(-base_age) %>%  # 移除中间计算变量
  ungroup()

# 查看结果
print(Data)

代码说明

  1. 基准年龄映射:根据个体首次被捕获的年龄组,确定其最小可能的初始年龄:
    • 1CY → 0岁,2CY → 1岁,>1CY → 1岁,>2CY → 2岁
  2. 年龄推导:每个后续观测的年龄 = 首次基准年龄 + (当前年份 - 首次捕获年份),因为每年个体年龄必然增长1岁,这样得到的就是该观测下的最小数值年龄
  3. 通用性:该逻辑统一处理所有年龄组,无需单独针对>1CY或>2CY写分支,解决了原代码的局限性

验证结果

运行上述代码后,得到的Age_Numeric列将完全匹配你期望的输出:

ID Age_Class Year Age_Numeric
1   A       1CY 2010           0
2   B       2CY 2010           1
3   A      >1CY 2011           1
4   B      >2CY 2011           2
5   C      >2CY 2011           2
6   A      >1CY 2012           2
7   B      >1CY 2012           3
8   A      >2CY 2013           3
9   B      >2CY 2013           4
10  C      >1CY 2013           4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:48:27