R语言:将含A/P的四位数字时间字符串转为24小时制时间
解决R语言中12小时制字符串转24小时制时间的问题
刚好我之前处理过类似的时间格式转换需求,给你两种靠谱的实现方案,都能精准得到你想要的结果:
方法一:使用Base R原生函数
不需要额外安装包,用R自带的字符串处理和时间解析函数就能搞定,步骤很清晰:
- 先把输入字符串末尾的
A/P替换成标准的AM/PM(因为R的时间解析函数默认识别完整的AM/PM标识) - 用
strptime()把字符串解析成时间对象 - 再用
strftime()把时间对象格式化为24小时制带冒号的字符串
完整代码如下:
# 输入数据 time <- c("1110A", "1120P", "0420P", "0245P") # 替换A/P为AM/PM time_ampm <- gsub("A$", "AM", gsub("P$", "PM", time)) # 解析为时间对象 time_obj <- strptime(time_ampm, format = "%I%M%p") # 格式化为24小时制时间字符串 Answer <- strftime(time_obj, format = "%H:%M") # 查看结果 Answer # 输出:[1] "11:10" "23:20" "16:20" "14:45"
方法二:使用lubridate包(更简洁)
如果你平时常用lubridate处理时间数据,这个方法会更简洁:
先确保安装了lubridate包,然后用parse_date_time()快速解析,再格式化输出:
# 安装并加载lubridate(首次使用需要安装) # install.packages("lubridate") library(lubridate) # 输入数据 time <- c("1110A", "1120P", "0420P", "0245P") # 替换A/P为AM/PM并解析时间 time_obj <- parse_date_time(gsub("([AP])$", "\\1M", time), orders = "%I%M%p") # 格式化为目标格式 Answer <- format(time_obj, "%H:%M") # 查看结果 Answer # 输出:[1] "11:10" "23:20" "16:20" "14:45"
关键格式说明
%I:12小时制的小时数(01-12)%M:分钟数(00-59)%p:AM/PM标识%H:24小时制的小时数(00-23)
两种方法都能完美实现你的需求,选你习惯的方式就行~
内容的提问来源于stack exchange,提问作者Tracy
相关产品推荐
相关产品推荐

