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

如何按相似Datetime分组?1小时内交易分组需求及R数据示例

按用户分组并聚合1小时内的交易

可以用dplyr和lubridate包实现需求,核心思路是按用户分组后,通过时间差判断是否开启新分组:

# 加载示例数据
df <- structure(list(`data hora` = c("01/10/2023 01:00", "01/10/2023 01:32", 
"01/10/2023 01:45", "04/10/2023 03:10", "04/10/2023 03:12", "06/10/2023 01:00", 
"01/10/2023 01:00", "01/10/2023 01:32", "02/10/2023 01:45"), 
    user = c("12345ag", "12345ag", "12345ag", "12345ag", "12345ag", 
    "12345ag", "4569lç", "4569lç", "4569lç"), 
    id_transacion = c(1, 2, 3, 4, 5, 6, 7, 8, 9)))

library(dplyr)
library(lubridate)

# 数据处理流程
df_processed <- df %>%
  # 将字符型时间转换为可计算的时间格式
  mutate(`data hora` = dmy_hm(`data hora`)) %>%
  # 按用户和时间排序,确保时间顺序正确
  arrange(user, `data hora`) %>%
  # 按用户分组处理
  group_by(user) %>%
  # 计算当前交易与上一条的时间差(单位:小时)
  mutate(time_diff = difftime(`data hora`, lag(`data hora`), units = "hours")) %>%
  # 生成分组ID:第一条记录或时间差超过1小时时,开启新分组
  mutate(group_id = cumsum(is.na(time_diff) | time_diff > 1)) %>%
  ungroup()

# 输出结果
print(df_processed)

运行后得到的分组结果如下:

data horauserid_transaciontime_diffgroup_id
2023-10-01 01:00:0012345ag1NA1
2023-10-01 01:32:0012345ag20.5333333 hours1
2023-10-01 01:45:0012345ag30.2166667 hours1
2023-10-04 03:10:0012345ag473.4166667 hours2
2023-10-04 03:12:0012345ag50.0333333 hours2
2023-10-06 01:00:0012345ag645.8 hours3
2023-10-01 01:00:004569lç7NA1
2023-10-01 01:32:004569lç80.5333333 hours1
2023-10-02 01:45:004569lç924.2166667 hours2

这个结果完全匹配你期望的分组逻辑:同一用户下,间隔1小时内的交易归为同一组,超过1小时则新建分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:25:31