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

如何在R中满足时间间隙条件后更新后续所有分组变量?

解决方案

你的核心问题是嵌套ifelse无法实现状态累积——ifelse是向量化操作,不会保留Group变量的状态变化,所以每次判断都是基于初始值,达不到"触发一次分组后后续沿用新组号"的需求。

基础R实现

直接用cumsum()累积统计时间间隙≥25分钟的触发次数,再加上初始组号1即可:

# 假设你的时间间隙列名为`Gap in Time`
df$Group <- 1 + cumsum(df$`Gap in Time` >= 25)

逻辑说明

  • 先生成一个逻辑向量:df$Gap in Time >= 25,满足条件的行返回TRUE(等价于1),否则返回FALSE(等价于0)
  • cumsum()对这个向量做累积求和,得到的结果是当前行之前已经触发了多少次分组切换
  • 初始组号为1,加上累积求和的结果,就得到了每行对应的分组编号

举个例子验证:
假设Gap in Time列的值是c(20, 30, 22, 28, 15),计算过程如下:

  1. 逻辑向量:c(FALSE, TRUE, FALSE, TRUE, FALSE)
  2. 累积求和:c(0, 1, 1, 2, 2)
  3. 加1后得到分组:c(1, 2, 2, 3, 3),完全符合你的需求:
    • 第2行(30分钟)触发新组2,后续第3行保持组2
    • 第4行(28分钟)触发新组3,后续第5行保持组3

tidyverse(dplyr)实现

如果你习惯用tidyverse语法,写法更直观:

library(dplyr)
df <- df %>%
  mutate(Group = 1 + cumsum(`Gap in Time` >= 25))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:57:44