R语言Lubridate:如何将日期时间对齐到指定时刻的下一次出现?
R语言日期时间向上对齐到指定时刻的实现方法
可以借助lubridate包(你已经在使用该包的ymd_hms函数)快速实现需求,核心思路是:生成原日期当天的目标时刻,若原时间晚于该时刻则自动顺延至次日的目标时刻。
具体代码实现
library(lubridate) # 原始数据 data <- data.frame(datetimes = c(ymd_hms("2024-01-01 04:12:35"), ymd_hms("2024-04-01 14:52:20"), ymd_hms("2024-03-18 23:43:56"))) # 指定目标时刻 target_time <- hms("10:30:00") # 计算对齐后的日期时间 data$aligned_datetimes <- floor_date(data$datetimes, "day") + target_time + days(as.integer(data$datetimes > (floor_date(data$datetimes, "day") + target_time)))
结果验证
运行后data$aligned_datetimes会得到预期结果:
2024-01-01 04:12:35→2024-01-01 10:30:002024-04-01 14:52:20→2024-04-02 10:30:002024-03-18 23:43:56→2024-03-19 10:30:00
代码说明
floor_date(data$datetimes, "day"):提取原时间的日期部分,返回当天0点+ target_time:得到当天的目标时刻as.integer(data$datetimes > ...):将逻辑判断(原时间是否晚于当天目标时刻)转换为0或1,0表示保留当天目标时刻,1表示加一天顺延至次日目标时刻
内容的提问来源于stack exchange,提问作者Raga
相关产品推荐
相关产品推荐

