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

基于时分列生成年月日序列的R语言技术实现需求

解决方案

可以用dplyr和lubridate包实现自动识别跨天并生成完整日期时间列,步骤如下:

  1. 将时间字符串转换为可比较的时间对象
  2. 标记跨天的行(当前时间小于前一行时间时判定为新一天)
  3. 累计跨天标记得到天数偏移量
  4. 基于起始日期生成每行的完整日期,再合并时间得到datetime列

完整代码

library(dplyr)
library(lubridate)
library(hms)

# 加载你的数据集
df <- structure(list(Zeit = c("11:35:00 AM", "12:43:00 PM", "12:48:00 PM", 
"12:53:00 PM", "12:58:00 PM", "1:03:00 PM", "1:08:00 PM", "1:13:00 PM", 
"1:18:00 PM", "1:23:00 PM", "1:28:00 PM", "1:33:00 PM", "1:38:00 PM", 
"1:43:00 PM", "1:48:00 PM", "1:53:00 PM", "1:58:00 PM", "2:03:00 PM", 
"2:30:00 PM", "2:45:00 PM", "3:00:00 PM", "3:15:00 PM", "3:30:00 PM", 
"3:45:00 PM", "4:00:00 PM", "4:15:00 PM", "4:30:00 PM", "4:45:00 PM", 
"5:00:00 PM", "5:15:00 PM", "5:30:00 PM", "5:45:00 PM", "6:00:00 PM", 
"6:15:00 PM", "6:30:00 PM", "6:45:00 PM", "7:00:00 PM", "7:15:00 PM", 
"7:30:00 PM", "7:45:00 PM", "8:00:00 PM", "8:15:00 PM", "8:30:00 PM", 
"8:45:00 PM", "9:00:00 PM", "9:15:00 PM", "9:30:00 PM", "9:45:00 PM", 
"10:00:00 PM", "10:15:00 PM", "10:45:00 PM", "11:15:00 PM", "11:45:00 PM", 
"12:15:00 AM", "12:45:00 AM", "1:15:00 AM", "1:45:00 AM", "2:15:00 AM", 
"2:45:00 AM", "3:15:00 AM", "3:45:00 AM", "4:15:00 AM"), SRB = c(0, 
0, 0, 0, 0, 0, 0, 0.0546352106, 1.89348740676, 14.16501124644, 
33.21026613524, 45.19095110716, 51.16722074468, 46.13852290212, 
38.99889779356, 31.72792609956, 26.59602736844, 23.91280426588, 
18.5369761618, 13.35816793588, 10.76876382292, 8.55463566836, 
7.29746120772, 5.824503071, 4.16390695508, 3.49779212892, 3.36644554348, 
2.5877479298, 2.24999956724, 2.27814526412, 2.10927108284, 1.94977880052, 
1.84657791196, 1.64017613484, 1.48068385252, 1.49006575148, 1.3211915702, 
1.35871916604, 1.58388474108, 1.40562866084, 1.39624676188, 1.16169928788, 
1.0397346014, 0.98344320764, 0.78642332948, 0.7582776326, 0.67384054196, 
0.51434825964, 0.46743876484, 0.39238357316, 0.0827809074800001, 
0.0264895137199999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), row.names = c(NA, 
-62L), class = "data.frame")

# 生成完整日期时间列
df <- df %>%
  # 转换时间字符串为hms对象,便于时间比较
  mutate(time = as_hms(Zeit)) %>%
  # 标记跨天的行:当前时间小于前一行则为新一天
  mutate(new_day = if_else(time < lag(time, default = first(time)), 1, 0)) %>%
  # 累计跨天次数,得到相对于起始日期的天数偏移
  mutate(day_offset = cumsum(new_day)) %>%
  # 计算每行的日期:起始日期 + 天数偏移
  mutate(date = ymd("2023-10-24") + days(day_offset)) %>%
  # 合并日期和时间,生成完整的datetime列
  mutate(datetime = ymd_hms(paste(date, time))) %>%
  # 移除中间过程列(可选)
  select(-time, -new_day, -day_offset)

# 查看结果
head(df, 10)
tail(df, 10)

代码说明

  • as_hms(Zeit):将Zeit列的字符串时间转换为hms类型,支持时间大小比较
  • new_day列:通过比较当前行与前一行的时间,识别跨天的起始行
  • day_offset:累计跨天次数,得到每行相对于起始日期的天数增量
  • ymd("2023-10-24") + days(day_offset):生成每行对应的日期
  • ymd_hms(paste(date, time)):合并日期和时间,得到标准的POSIXct格式日期时间

这个方案可以自动处理任意长度的数据集,无论跨天次数多少都能准确生成完整的日期时间列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 19:04:57