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

使用dplyr按时间生成时段列失效,求可行解决方法

问题解决:新增时段TOD列异常的修复

核心原因

你的time字段类型与hms()生成的时间对象不兼容,导致比较逻辑失效,出现全NA或全"night"的结果。常见情况是time为字符型而非hms/Period类型,或是用了不支持秒数的hm()进行转换。

解决方案1:确保time为hms格式后判断

先把字符型的time转换成支持时分秒的hms格式,再执行时段判断:

library(dplyr)
library(hms)

mobile2022 <- mobile2022 %>%
  # 转换时间格式,as_hms支持含秒数的字符型时间
  mutate(time = as_hms(time)) %>%
  mutate(TOD = case_when(
    time >= as_hms("00:00:00") & time <= as_hms("04:59:59") ~ "early morning",
    time >= as_hms("05:00:00") & time <= as_hms("09:59:59") ~ "morning",
    time >= as_hms("10:00:00") & time <= as_hms("14:59:59") ~ "afternoon",
    time >= as_hms("15:00:00") & time <= as_hms("18:59:59") ~ "evening",
    TRUE ~ "night"
  ))

解决方案2:提取小时数判断(更稳妥)

如果你的time是带日期的POSIXct类型,或不想纠结时间格式,直接提取小时数来划分时段:

library(dplyr)
library(lubridate)

mobile2022 <- mobile2022 %>%
  mutate(
    # 提取时间的小时部分
    hour_val = hour(time),
    TOD = case_when(
      hour_val %in% 0:4 ~ "early morning",
      hour_val %in% 5:9 ~ "morning",
      hour_val %in% 10:14 ~ "afternoon",
      hour_val %in% 15:18 ~ "evening",
      TRUE ~ "night"
    )
  )

验证步骤

  1. 用class(mobile2022$time)查看原字段类型,确认转换方向。
  2. 转换后用head(mobile2022$time)检查时间格式是否正确,确保无NA值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 20:05:27