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

使用lubridate处理visit_datetime时段划分问题求助

问题原因与解决办法

你的代码结果全为2,核心问题是带日期的datetime类型和纯时间period类型直接比较逻辑不成立:

  • visit_datetime是包含日期+时间的datetime对象,内部存储为从起始基准日(如1970-01-01)到该时刻的总秒数,数值极大;
  • hm("08:00")生成的是仅代表8小时时长的period对象,内部存储为28800秒。
    直接对比时,所有visit_datetime的秒数都远大于28800,也远大于hm("20:00")的72000秒,所以条件永远不满足,全部返回2。

解决方法

方法1:提取时间部分后再比较(精确到分钟)

先把datetime转成纯时间格式,再和目标时间区间对比:

library(lubridate)
# 提取datetime中的时间部分为hms类型
visit_time <- as_hms(visit_datetime)
# 按区间赋值(08:00含-20:00不含为1,其余为2)
tijd_presentatie <- ifelse(visit_time >= hm("08:00") & visit_time < hm("20:00"), 1, 2)

方法2:用小时/分钟函数直接判断(更高效)

如果不需要精确到分钟,只按小时判断:

tijd_presentatie <- ifelse(hour(visit_datetime) >= 8 & hour(visit_datetime) < 20, 1, 2)

如果需要精确到分钟(比如8:00整算1,19:59算1,20:00整算2),可以转成分钟数对比:

tijd_presentatie <- ifelse(
  (hour(visit_datetime)*60 + minute(visit_datetime)) >= 8*60 & 
  (hour(visit_datetime)*60 + minute(visit_datetime)) < 20*60,
  1,
  2
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:41:04