R语言格式化含星期的日期列时分始终显示00:00问题求助
问题原因
时间全部显示为00:00的核心原因是解析函数使用错误:
as.Date()仅支持存储年月日级别的纯日期值,设计上就不保留时分秒信息,哪怕你在格式字符串里写了%H:%M的匹配规则,解析完成后时间部分也会被直接截断,统一设为当日0点。- 另外你贴的示例构造代码有个小bug:
data.frame(a,b,c,stringsAsFactors = FALSE)里的c对象没有定义,直接运行会报错,实际使用时删掉这个不存在的列即可。
修复方案
用支持日期时间存储的as.POSIXct()替换as.Date()做解析即可,POSIXct类型会完整保留时分秒信息,后续格式化就不会丢失时间:
library(dplyr) # 构造测试数据 a <- c(1:6) Date <- c("Tuesday, 05 December 2012 05:00","Tuesday, 05 December 2012 06:55","Tuesday, 05 December 2012 07:10", "Tuesday, 05 December 2012 10:23", "Tuesday, 05 December 2012 11:43","Tuesday, 05 December 2012 13:04") b <- c("0","0","0","1","1","1") df1 <- data.frame(a, b, Date, stringsAsFactors = FALSE) # 正确转换代码 df1 <- df1 %>% mutate(DateTime = format(as.POSIXct(Date, format = "%A, %d %B %Y %H:%M"), "%d-%m-%Y %H:%M"))
运行后得到的结果如下,时间部分会正常保留:
a Date b DateTime 1 1 Tuesday, 05 December 2012 05:00 0 05-12-2012 05:00 2 2 Tuesday, 05 December 2012 06:55 0 05-12-2012 06:55 3 3 Tuesday, 05 December 2012 07:10 0 05-12-2012 07:10 4 4 Tuesday, 05 December 2012 10:23 1 05-12-2012 10:23 5 5 Tuesday, 05 December 2012 11:43 1 05-12-2012 11:43 6 6 Tuesday, 05 December 2012 13:04 1 05-12-2012 13:04
小提示:如果运行后出现时间偏移的问题,是系统默认时区导致的,可以在
as.POSIXct()中指定时区参数,比如国内用户可以写as.POSIXct(Date, format = "%A, %d %B %Y %H:%M", tz = "Asia/Shanghai")即可。
内容的提问来源于stack exchange,提问作者obrunt
相关产品推荐
相关产品推荐

