我有一个数据帧df,它具有以下格式的日期因子变量:
2015-12-15 10:00:00
2015-12-19 12:00:00
2015-12-20 20:00:00
这是每小时的数据。在午夜00:00:00观看时会出现问题,因为它不会出现在小时。它只是说:
21/12/2015
正如你所看到的那样,它只说了一天,但却没有时间。 所以我使用strptime转换为日期格式:
df$date <- strptime(df$date,"%d/%m/%Y %H:%M")
除了午夜00:00:00的任何一天,这一切都适用于所有的时间和日期,返回:
NA
我非常感谢一些帮助,因为我一直在查看StackOverflow和其他论坛以前的帖子,但我没有&#39;设法找出这个特定问题的解决方案。
答案 0 :(得分:4)
来自R的strptime文档(重点补充):
格式
字符串。格式方法的默认值为“%Y-%m-%d%H:%M:%S”如果任何元素的时间分量不是午夜,则为“%Y-%m-%d” “否则。如果设置了选项(“digits.secs”),则打印指定的位数将持续数秒。
所以信息仍然存在,您只需要format
将其与时间组件一起打印出来。
> midnight <- strptime("2015-12-19 00:00:00","%Y-%m-%d %H:%M")
> midnight
[1] "2015-12-19 EST"
> format(midnight,"%Y/%m/%d %H:%M")
[1] "2015/12/19 00:00"
答案 1 :(得分:1)
如果我们有vector
之类的“v1”,则使用strptime
我们会为那些格式不正确的元素获取NA
strptime(v1, "%d/%m/%Y %H:%M:%S", tz = "UTC")
#[1] "2015-12-19 12:00:00 UTC" NA
解决此问题的一种方法是将paste
“00:00:00”字符串替换为那些没有
v1[!grepl(":", v1)] <- paste(v1[!grepl(":", v1)], "00:00:00")
strptime(v1, "%d/%m/%Y %H:%M:%S", tz = "UTC")
#[1] "2015-12-19 12:00:00 UTC" "2015-12-19 00:00:00 UTC"
如果我们使用lubridate
,parse_date_time
可以使用多种格式
library(lubridate)
parse_date_time(v1, guess_formats(v1, c("%d/%m/%Y %H:%M:%S", "%d/%m/%Y")))
#[1] "2015-12-19 12:00:00 UTC" "2015-12-19 00:00:00 UTC"
v1 <- c("19/12/2015 12:00:00", "19/12/2015")