R语言判断时间为AM/PM的ifelse代码问题求助
解决R语言判断时间属于AM/PM的问题
原代码存在三个核心问题,导致无法正常运行:
as.Date()仅能解析日期部分,会直接丢弃时间信息,根本没法判断上午还是下午- 代码里的
AM是未定义的变量,R不知道它代表什么,不能直接用来做比较 - 没有正确的逻辑来提取时间的时段信息
下面给出两种可行的修正方案:
方案一:通过小时数判断(无需额外包)
# 正确解析包含时间的字符串,保留完整的日期时间信息 date_1 <- as.POSIXct("2021/05/25 14:34:25", format = "%Y/%m/%d %H:%M:%S") # 提取24小时制的小时数,转成整数后判断 hour_num <- as.integer(strftime(date_1, "%H")) result <- ifelse(hour_num < 12, "It is in the AM", "It is the PM") print(result)
方案二:直接提取AM/PM标识(需注意系统语言)
如果你的R环境是英文语言设置,可以直接提取时段标识来判断:
# 用strptime解析日期时间 date_1 <- strptime("2021/05/25 14:34:25", format = "%Y/%m/%d %H:%M:%S") # 用%p格式化字符串获取AM/PM标识 ampm_tag <- strftime(date_1, "%p") result <- ifelse(ampm_tag == "AM", "It is in the AM", "It is the PM") print(result)
关键说明
- 必须使用
as.POSIXct()或strptime()这类支持时间解析的函数,不能用仅处理日期的as.Date() - 24小时制下,小时数小于12为上午(AM),大于等于12为下午(PM),这个逻辑适用于所有语言环境
- 用
%p提取AM/PM的方式依赖系统语言,如果是中文环境,会返回“上午”/“下午”,需要对应修改判断条件
内容的提问来源于stack exchange,提问作者Rizzle
相关产品推荐
相关产品推荐

