如何在 R 中使用 strptime() 保持午夜 (00:00h)?

How can I keep midnight (00:00h) using strptime() in R?

我有一个数据框 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 的任何一天午夜外,它在所有时间和日期都工作正常,returns:

NA

我非常感谢您的帮助,因为我一直在查看 Whosebug 和其他论坛中以前的帖子,但我还没有设法找到解决此特定问题的方法。

如果我们有一个像 "v1" 这样的 vector,通过使用 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"

或者如果我们使用 lubridateparse_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") 

来自 R 的 strptime 文档(强调已添加):

format

A character string. The default for the format methods is "%Y-%m-%d %H:%M:%S" if any element has a time component which is not midnight, and "%Y-%m-%d" otherwise. If options("digits.secs") is set, up to the specified number of digits will be printed for seconds.

所以信息仍然存在,您只需要 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"