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

R语言:将周期型长格式时间序列转换为宽格式小时级时间序列

把事件起止数据转成小时级宽格式时间序列(无值填0)

嘿,我来帮你搞定这个转换需求!从你提供的数据结构来看,你有一批关联资产和事件时间戳的数据,想要把它转成小时级的宽格式时间序列,没有对应事件的小时就用0填充。下面用R的tidyverse+lubridate工具链来实现,步骤很清晰:

1. 先加载必备工具包

library(tidyverse)
library(lubridate)

2. 预处理原始数据:拆分事件到每一小时

首先得把每个事件的起止时段拆成它覆盖的每一个小时。比如一个事件从2018-05-07 01:30:00到2018-05-07 03:15:00,我们要把它拆成01:00、02:00、03:00这三个小时的记录,标记为有事件(值为1)。

假设你的数据框叫df,先把Unix时间戳转成可读的datetime格式,再生成每个事件覆盖的小时序列:

df <- df %>%
  # 把Unix时间戳转成datetime格式
  mutate(
    EventStart = as_datetime(EventStart),
    EventEnd = as_datetime(EventEnd)  # 假设你的数据包含事件结束时间,若没有需调整逻辑
  ) %>%
  # 按行生成每个事件覆盖的所有小时节点
  rowwise() %>%
  mutate(
    hour_seq = list(seq(floor_date(EventStart, "hour"), floor_date(EventEnd, "hour"), by = "hour"))
  ) %>%
  unnest(hour_seq) %>%
  # 标记该小时对应资产有事件
  mutate(has_event = 1) %>%
  select(AffectedAssetMask, hour_seq, has_event)

3. 生成完整的小时时间轴

为了保证没有事件的小时也能被包含进来,我们需要先生成整个数据集时间范围内的所有连续小时:

# 确定时间范围的首尾小时节点
min_hour <- floor_date(min(df$hour_seq), "hour")
max_hour <- floor_date(max(df$hour_seq), "hour")

# 生成无间断的完整小时序列
full_hour_axis <- tibble(hour_seq = seq(min_hour, max_hour, by = "hour"))

4. 合并数据并转成宽格式

现在把完整小时轴和事件数据合并,然后转成宽格式,把没有事件的小时填0:

wide_time_series <- full_hour_axis %>%
  # 交叉连接所有资产,确保每个小时每个资产都有一条记录
  crossing(AffectedAssetMask = unique(df$AffectedAssetMask)) %>%
  # 左连接事件数据,无事件的记录会显示NA
  left_join(df, by = c("hour_seq", "AffectedAssetMask")) %>%
  # 把NA替换为0,代表该小时无事件
  mutate(has_event = replace_na(has_event, 0)) %>%
  # 转成宽格式:每个资产对应一列,每行是一个小时节点
  pivot_wider(
    names_from = AffectedAssetMask,
    values_from = has_event,
    names_prefix = "Asset_"  # 可选,给列名加前缀更清晰
  )

结果说明

最终的wide_time_series就是你要的格式:

  • 第一列hour_seq是每个小时的时间节点
  • 后续每列对应一个资产,值为1表示该小时该资产有事件,0表示无事件

特殊情况调整

如果你的原始数据没有EventEnd字段(每个事件仅持续1小时),直接用EventStart作为hour_seq即可,跳过生成小时序列的步骤。要是你用Python实现,思路类似:用pandas的explode生成小时序列,再用pivot_table转宽格式,通过fill_value=0填充空值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:59:53