如何在 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"
或者如果我们使用 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")
来自 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"
我有一个数据框 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
对于那些没有
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")
来自 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"