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

如何在R中基于时间顺序的时间差对观测值进行分组

R语言按相邻观测时间间隔分组实现方案

你已经完成了滞后时间差的计算,只需要通过逻辑判断的累积和即可生成分组标识,以下是两种常用实现方式:

基础R实现

# 逻辑判断:相邻时间差≥2小时则触发新分组,第一行默认是分组起点
new_group_flag <- !is.na(data$time_diff) & data$time_diff >= 2
# 累积求和生成数字分组,转成A/B/C类字母标识
data$group <- LETTERS[cumsum(new_group_flag) + 1]

tidyverse/dplyr实现

library(dplyr)
data <- data %>%
  mutate(
    lag = lag(date),
    time_diff = as.numeric(difftime(date, lag, units = "hours")),
    # coalesce将第一行的NA替换为TRUE,标记为分组起点
    group = cumsum(coalesce(time_diff >= 2, TRUE)),
    # 数字转字母标识,不需要字母可删除本行
    group = LETTERS[group]
  )

实现原理

  • 我们先标记所有需要开启新分组的行:第一行、与上一行时间差≥2小时的行
  • cumsum()函数会对逻辑值累计求和,逻辑值TRUE等价于1,FALSE等价于0,每遇到一个新分组起点,分组编号就+1,最终连续间隔小于2小时的观测会被分配到同一个分组编号
  • 调用内置的LETTERS常量即可将数字分组转为你示例中的A/B/C/D/E字母分组。

运行上述代码后得到的结果和你期望的输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:54:01