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

R语言如何按145天间隔为各巢观测值分配唯一周期编号

R 实现方案

方案1:tidyverse 实现(逻辑直观,适配分组操作)

核心逻辑是按Nest_ID分组后,滚动跟踪每个周期的起始累计间隔值,每当当前累计间隔与周期起始值的差≥145时,就开启新周期,最终将周期起始值映射为连续编号。

# 加载依赖包
library(dplyr)
library(purrr)

# 计算Nest_period
df_result <- df %>%
  group_by(Nest_ID) %>%
  mutate(
    # 滚动记录每个周期的起始累计间隔
    period_start = accumulate(total_interval, function(prev_start, curr_total) {
      if (curr_total - prev_start >= 145) curr_total else prev_start
    }),
    # 将周期起始值转换为连续的周期编号
    Nest_period = as.integer(factor(period_start, levels = unique(period_start)))
  ) %>%
  ungroup() %>%
  select(-period_start) # 移除临时辅助列

运行后输出的df_result和你期望的结果完全一致。

方案2:base R 实现(无需额外安装包)

如果不想依赖第三方包,可以用分组循环的方式实现:

df$Nest_period <- ave(df$total_interval, df$Nest_ID, FUN = function(x) {
  if (length(x) == 0) return(numeric(0))
  period_start <- x[1]
  period_no <- 1
  res <- rep(1, length(x))
  for (i in seq_along(x)[-1]) {
    if (x[i] - period_start >= 145) {
      period_start <- x[i]
      period_no <- period_no + 1
    }
    res[i] <- period_no
  }
  res
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:54:03