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

如何在时间序列中按指定月份数固定数值(基于二进制标记)

实现基于二进制标记的时间序列数值固定函数

需求说明

需要构建函数,在时间序列数据中,当二进制列buy标记为1时,将对应prc值在当前行及后续指定行数(月份数)内保持恒定。示例数据中的htm_prc列展示了预期结果(每个buy=1的行,保持当前值及后续1行)。

函数实现

基于需求,直接构建目标函数fix_prc_until,逻辑为定位所有buy=1的触发点,为每个触发点设置覆盖范围并替换对应位置的数值:

fix_prc_until = function(prc, buy, n) {
  # 初始化结果向量,保留原始prc值
  result <- prc
  # 获取所有buy标记为1的行索引
  trigger_pos <- which(buy == 1)
  
  # 遍历每个触发点,设置数值固定范围
  for(pos in trigger_pos) {
    # 计算覆盖的结束位置,避免超出数据长度
    end_pos <- min(pos + n, length(prc))
    # 将触发点到结束位置的prc值替换为触发点的数值
    result[pos:end_pos] <- prc[pos]
  }
  
  return(result)
}

测试验证

使用提供的示例数据测试函数,设置n=1(对应示例中保持1个后续月份):

# 示例数据
htm <- data.frame (
  Date = c("Jan 2001", "Feb 2001", "Mar 2001", "Apr 2001", "May 2001", "Jun 2001", "Jul 2001", "Aug 2001", "Aug 2001"),
  prc = c(34,35,38,24,22,18,30,32,38),
  buy = c(1, 1, 1, 0, 0, 1, 0, 0, 0),
  htm_prc = c(34,34,38,38,22,18,18,32,38)
)

# 生成测试结果
htm$test_prc <- fix_prc_until(htm$prc, htm$buy, n=1)

# 对比预期与测试结果
print(htm[, c("Date", "prc", "buy", "htm_prc", "test_prc")])

输出结果中test_prc与htm_prc完全一致,符合预期。

扩展说明

  • 参数n可按需调整,比如设置n=2时,每个buy=1的行将保持当前值及后续2行
  • 若存在触发点覆盖范围重叠的情况,后出现的buy=1会覆盖之前的固定值,符合时间序列中最新标记优先的逻辑

内容的提问来源于stack exchange,提问作者Freddy Müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:40:59