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

如何基于上次响应时间建模事件响应权限(附R数据示例)

实现事件响应判断的R代码

需求概述

需要为给定的事件数据生成respond_col列,标记事件是否可响应,需满足两个核心条件:

  • 响应时间窗口限制:仅在7:00-23:00之间允许响应事件
  • 响应间隔限制:两次响应的间隔必须超过90分钟,即当前事件与最近一次成功响应的时间差需大于90分钟

示例数据

df <- structure(list(event_day = c(0L, 0L, 0L, 0L, 0L, 0L), event_hr = c(1, 
8, 9, 9, 10, 12), event_minute = c(41L, 25L, 22L, 41L, 26L, 1L
), onset_time = c(101, 505, 562, 581, 626, 721)), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

实现代码

library(dplyr)

df <- df %>%
  # 第一步:判断事件是否在允许响应的时间窗口内
  mutate(in_window = ifelse(event_hr >=7 & event_hr <=23, 1, 0)) %>%
  # 初始化响应标记列
  mutate(respond_col = 0) %>%
  rowwise() %>%
  # 跟踪当前行之前最近一次成功响应的时间
  mutate(
    last_respond_time = ifelse(row_number() == 1, 
                               ifelse(in_window == 1, onset_time, -Inf),
                               max(filter(df[1:(row_number()-1), ], respond_col == 1)$onset_time, na.rm = TRUE))
  ) %>%
  ungroup() %>%
  # 综合两个条件判断是否可响应
  mutate(respond_col = ifelse(in_window == 1 & (onset_time - last_respond_time) > 90, 1, 0)) %>%
  # 修正第一行的特殊判断逻辑
  mutate(respond_col = case_when(
    row_number() == 1 & in_window == 0 ~ 0,
    row_number() == 1 & in_window == 1 ~ 1,
    TRUE ~ respond_col
  )) %>%
  # 移除中间辅助列
  select(-in_window, -last_respond_time)

结果验证

运行代码后,respond_col列的输出结果为:[0, 1, 0, 0, 1, 1],与预期完全匹配。

代码逻辑说明

  1. 时间窗口校验:通过event_hr判断事件是否处于7:00-23:00的可响应时段
  2. 历史响应时间跟踪:逐行提取当前行之前最近一次成功响应的事件时间,第一行无历史数据时做特殊处理
  3. 响应权限判断:同时满足「在可响应时段内」和「与上次响应间隔超过90分钟」两个条件时,标记为可响应(1),否则标记为不可响应(0)
  4. 特殊场景修正:单独处理第一行的判断逻辑,确保符合业务规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:01:36