R中使用lubridate处理多格式时间转POSIXct失败的解决方法
解决lubridate解析多种时间格式的问题
针对你遇到的多种时间格式解析失败的问题,有两种实用方案:
方案一:给lubridate指定多个解析格式
parse_date_time支持传入格式向量,会依次尝试用每个格式解析时间字符串,同时可以通过year参数控制两位年份的解析规则。
代码示例:
library(lubridate) # 同时指定两种目标格式,设置两位年份解析为20xx(可根据数据调整) df$TimeClosed <- parse_date_time(df$TimeClosed, orders = c('mdy HMSp', 'mdy HM'), year = 2000)
orders = c('mdy HMSp', 'mdy HM'):告诉函数先尝试解析带AM/PM的时分秒格式,再尝试不带秒和AM/PM的24小时制时分格式year = 2000:将两位年份(如19)解析为2019,默认规则是00-69对应2000-2069,70-99对应1970-1999,可根据你的数据实际情况调整。
方案二:用anytime包自动识别格式
如果时间格式比较杂,anytime包的anytime()函数可以自动识别绝大多数常见时间格式,无需手动指定,返回结果直接是POSIXct类型。
代码示例:
library(anytime) df$TimeClosed <- anytime(df$TimeClosed)
测试验证
用你的两种时间格式测试:
test_times <- c("09/12/2017 11:08:51 AM", "7/6/19 15:37") # lubridate方案输出 parse_date_time(test_times, c('mdy HMSp', 'mdy HM'), year=2000) # [1] "2017-09-12 11:08:51 UTC" "2019-07-06 15:37:00 UTC" # anytime方案输出 anytime(test_times) # [1] "2017-09-12 11:08:51 CST" "2019-07-06 15:37:00 CST"
两种方案都能正确完成格式转换。
内容的提问来源于stack exchange,提问作者Jean-Paul Azzopardi
相关产品推荐
相关产品推荐

