如何统一R数据框中格式不规范的时间输入?
统一时间格式的R语言实现
先构造你的示例时间向量:
times <- c("450pm", "10:00am", "245pm", "9am", "12:30pm")
方法一:使用Base R的gsub分两步处理
先处理3位数字的无冒号时间(如450pm→4:50pm),再处理仅含小时的时间(如9am→9:00am):
# 第一步:给3位数字的时间插入冒号 step1 <- gsub("(\\d)(\\d{2})(am|pm)", "\\1:\\2\\3", times) # 第二步:给仅小时的时间补全分钟为:00 standard_times <- gsub("(\\d)(am|pm)", "\\1:00\\2", step1) # 查看结果 standard_times # [1] "4:50pm" "10:00am" "2:45pm" "9:00am" "12:30pm"
方法二:使用stringr包一步完成
如果习惯用stringr的语法,可以用str_replace_all同时处理两种规则:
library(stringr) standard_times <- str_replace_all(times, c("(\\d)(\\d{2})(am|pm)" = "\\1:\\2\\3", "(\\d)(am|pm)" = "\\1:00\\2"))
正则规则说明
(\\d)(\\d{2})(am|pm):匹配「1位数字+2位数字+am/pm」的格式,通过分组将小时和分钟用冒号分隔(\\d)(am|pm):匹配「1位数字+am/pm」的格式,在小时和时段之间插入:00补全分钟
内容的提问来源于stack exchange,提问作者gotmilk
相关产品推荐
相关产品推荐

