如何修正R中datetime向量年份与日期顺序转换错误?
正确解析timestamp列的日期格式
问题分析
你的解析代码出错是因为指定的格式字符串和原始timestamp的格式不匹配:
- 原始timestamp格式为
日.月.两位年份 时:分(例如"03.12.20 6:00") - 你错误使用了
%Y.%m.%d(代表年.月.日),导致程序把"03"当成了四位数年份的前两位,最终解析出错误的0003-12-20
解决方案
方法1:使用base R的as.POSIXct
指定正确的格式字符串"%d.%m.%y %H:%M",各占位符含义:
%d:两位日期%m:两位月份%y:两位年份(自动补全为20xx年)%H:%M:小时:分钟
代码示例:
# 正确解析timestamp列 po59$timestamp <- as.POSIXct(po59$timestamp, format = "%d.%m.%y %H:%M", tz = Sys.timezone()) # 验证转换结果 po59$timestamp # 重新转换为bupaR eventlog对象 po59br <- bupaR::eventlog(eventlog = po59, case_id = "case_id", activity_id = "activity", activity_instance_id = "action", lifecycle_id = "lifecycle", timestamp = "timestamp", resource_id = "resource")
方法2:使用lubridate包(更简洁)
lubridate可以自动识别这种欧洲风格的日期格式,无需手动指定格式规则:
library(lubridate) # 解析timestamp列 po59$timestamp <- dmy_hm(po59$timestamp, tz = Sys.timezone()) # 后续转换为eventlog的步骤同上
验证结果
转换完成后,timestamp列会呈现为2020-12-03 06:00:00(带时区信息)的正确格式。
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

