在R中解析d-HH:MM:SS格式不完整日期列的更优雅实现方法?
R语言日期格式转换优化方案
问题背景
旧设备输出的DateTime列格式为
d-HH:MM:SS,需要补充固定的年、月信息后转换为标准YYYY-MM-DD HH:MM:SS格式,比如样例值26-16:24:40需转为2021-11-26 16:24:40。
现有实现代码
dat %>% mutate(year = "2021", month = "11") %>% mutate(day = substr(date.time, 1, 2), hour = substr(date.time, 4, 5), minute = substr(date.time, 7, 8), second = substr(date.time, 10, 11)) %>% mutate(date = make_datetime(year, month, day, hour, minute, second))
测试样例数据
testDate <- c("26-16:24:40", "26-16:29:40", "26-16:34:40", "26-16:39:40", "26-16:44:40", "26-16:49:40", "26-16:54:40", "26-16:59:40", "26-17:04:40", "26-17:09:40")
更简洁的实现方式
- 方案1:用lubridate包解析(可读性高,适配性强)
直接拼接固定年月前缀后指定格式解析,无需拆分每个时间组分:
library(lubridate) library(dplyr) dat %>% mutate(date = parse_date_time(paste0("2021-11-", date.time), orders = "%Y-%m-%d-%H:%M:%S")) # 测试样例验证 parse_date_time(paste0("2021-11-", testDate), orders = "%Y-%m-%d-%H:%M:%S")
- 方案2:用基础函数实现(无额外包依赖)
如果不想引入lubridate依赖,用R原生as.POSIXct即可完成转换:
library(dplyr) dat %>% mutate(date = as.POSIXct(paste0("2021-11-", date.time), format = "%Y-%m-%d-%H:%M:%S"))
两种方案的逻辑一致,都省去了手动拆分日期各个组分的步骤,如果后续年、月改为动态参数,只需要替换paste0中的固定字符串为对应变量即可。
内容的提问来源于stack exchange,提问作者S_Gill
相关产品推荐
相关产品推荐

