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

如何为R数据框中每个日期创建1小时间隔的小时时间戳

R实现日期生成每小时间隔时间戳方案

首先修正你给出的示例数据的语法问题,日期类值需要用字符串包裹,先统一转换为标准日期时间格式再处理:

# 修正后的示例数据
df <- data.frame(
  id = c(1, 2, 3, 4),
  Date = c("2021-04-18", "2021-04-19", "2021-04-21 07:07:08.000", "2021-04-22")
)
# 转换为标准日期时间格式
df$Date <- as.POSIXct(df$Date)

基础R实现(无需循环)

用向量化操作替代循环,执行效率更高:

# 为每行日期生成24个小时的时间戳,存入列表列
df$hour_timestamps <- lapply(df$Date, function(x) {
  # 取当前日期的0点作为序列起始点
  start_time <- as.POSIXct(format(x, "%Y-%m-%d 00:00:00"))
  # 生成步长1小时、长度24的时间序列
  hour_seq <- seq(start_time, by = "hour", length.out = 24)
  # 格式化为HH:MM的输出样式
  format(hour_seq, "%H:%M")
})

# 如需展开为一行对应一个时间戳的长表,执行以下代码
df_long <- data.frame(
  id = rep(df$id, each = 24),
  Date = rep(df$Date, each = 24),
  hour_timestamp = unlist(df$hour_timestamps)
)

tidyverse简洁实现

library(dplyr)
library(tidyr)
library(lubridate)

df <- df %>%
  # 自动适配仅日期、带时分秒的混合时间格式
  mutate(Date = ymd_hms(Date, truncated = 3)) %>%
  rowwise() %>%
  mutate(hour_timestamps = list(
    # 取当日0点生成小时序列
    seq(floor_date(Date, unit = "day"), by = "hour", length.out = 24) %>%
      format("%H:%M")
  )) %>%
  # 直接展开为长表,无需额外处理
  unnest_longer(hour_timestamps)

注意事项

  • 若原始数据的Date列已经是标准POSIXct/POSIXlt格式,可跳过格式转换步骤
  • 如需提取指定时间戳,直接按位置取值即可,例如df$hour_timestamps[[1]][11]即可拿到第一行日期对应的10:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:57:03