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

R语言如何根据事件起止变量生成区间内事件是否发生的指示变量

需求实现方案

核心逻辑:先匹配每个事件ID对应的起止时间区间,再判断每个时间点t是否落在任意一个有效区间内,是则标记为1,否则为0。

方法1:tidyverse 实现

library(tidyverse)

# 提取所有事件的起止区间
event_intervals <- dat %>%
  pivot_longer(cols = c(id1, id2), names_to = "event_type", values_to = "event_id") %>%
  drop_na(event_id) %>%
  pivot_wider(names_from = event_type, values_from = t) %>%
  rename(start = id1, end = id2)

# 生成目标列
dat <- dat %>%
  mutate(desiredoutcome = map_int(t, ~as.integer(any(.x >= event_intervals$start & .x <= event_intervals$end))))

方法2:base R 实现

无需额外安装依赖包,原生代码实现:

# 提取所有不重复的事件ID
event_ids <- na.omit(unique(c(dat$id1, dat$id2)))

# 生成每个事件对应的起止区间
event_intervals <- t(sapply(event_ids, function(id) {
  c(start = dat$t[dat$id1 == id], end = dat$t[dat$id2 == id])
}))

# 遍历每个时间点判断是否在有效区间内
dat$desiredoutcome <- sapply(dat$t, function(x) {
  as.integer(any(x >= event_intervals[, "start"] & x <= event_intervals[, "end"]))
})

两种方法生成的desiredoutcome和示例给出的预期结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:54:04