如何判断POSIXct类型时间是否早于指定时间(下午5点)
解决方案
要实现对POSIXct/POSIXt类型的Depart列判断是否早于下午5点并生成标记列,你需要修正原代码中直接使用5pm的错误(R无法识别该格式),以下是两种可行方法:
方法1:提取小时数判断
借助lubridate包的hour()函数提取时间的小时部分,和17(下午5点对应的24小时制数值)比较:
library(dplyr) library(lubridate) time_flag_df <- my_df %>% mutate(my_column = case_when( hour(Depart) < 17 ~ "Y", TRUE ~ "" # 不符合条件的行可返回空字符串或"N",按需修改 ))
方法2:构造当日下午5点的时间对象
将Depart的日期部分与"17:00:00"拼接成完整的POSIXct对象,再进行时间比较:
library(dplyr) time_flag_df <- my_df %>% mutate( daily_5pm = as.POSIXct(paste(as.Date(Depart), "17:00:00")), my_column = case_when( Depart < daily_5pm ~ "Y", TRUE ~ "" ) ) %>% select(-daily_5pm) # 可选,删除临时生成的daily_5pm列
关键说明
case_when()需要覆盖所有行的情况,因此必须添加TRUE ~ ...分支处理不满足条件的记录- 原代码未闭合括号,修正后的代码补充了完整的括号结构
内容的提问来源于stack exchange,提问作者marcelklib
相关产品推荐
相关产品推荐

