Ric*_*ard 7 datetime r date-conversion posixct
我以日期形式提供数据(格式"YYYY-MM-DD",例如"2015-03-11",以及当天的小时数(0-23).
生成表单的时间对象最方便的方法是什么
"2015-03-11" and hour = 0 -> "2015-03-11 00:00"
"2015-03-11" and hour = 1 -> "2015-03-11 01:00"
"2015-03-11" and hour = 2 -> "2015-03-11 02:00"
Run Code Online (Sandbox Code Playgroud)
我可以使用Base中的Date函数或来自xts或timeDate的函数.应该很容易,但我相信那里的人很快就会知道.
编辑:数据以2列提供,一列用于日期,一列用数字.
您不需要外部程序包来执行此操作.
如果您的数据采用以下格式:
df=data.frame(date=c("2015-03-11","2015-03-11","2015-03-11"),hour=0:2)
Run Code Online (Sandbox Code Playgroud)
只需应用以下功能:
format(as.POSIXct(df$date)+df$hour*60*60, format = "%Y-%m-%d %H:%M")
Run Code Online (Sandbox Code Playgroud)
假设我们有这样的输入:
date <- c("2015-03-11", "2015-03-12")
hour <- 2:3
Run Code Online (Sandbox Code Playgroud)
然后尝试其中之一:
1) 计时
library(chron)
as.chron(date) + hour/24
Run Code Online (Sandbox Code Playgroud)
给予:
[1] (03/11/15 02:00:00) (03/12/15 03:00:00)
Run Code Online (Sandbox Code Playgroud)
2)POSIXct。这个只使用 R 的基础,没有包:
as.POSIXct(date) + 3600 * hour
Run Code Online (Sandbox Code Playgroud)
在我的系统上给予:
[1] "2015-03-11 02:00:00 EDT" "2015-03-12 03:00:00 EDT"
Run Code Online (Sandbox Code Playgroud)
如果您想要 UTC 时区的结果,请使用:
as.POSIXct(date, tz = "UTC") + 3600 * hour
Run Code Online (Sandbox Code Playgroud)
3) 润滑
library(lubridate)
ymd(date) + hours(hour)
Run Code Online (Sandbox Code Playgroud)
给予:
[1] "2015-03-11 02:00:00 UTC" "2015-03-12 03:00:00 UTC"
Run Code Online (Sandbox Code Playgroud)
如果您希望它位于当前时区,则:
ymd(date, tz = "") + hours(hour)
Run Code Online (Sandbox Code Playgroud)
请注意,chron 解决方案提供了一个不使用时区的日期/时间类,从而消除了时区可能导致的许多问题。POSIXct 和 lubridate 解决方案给出特定时区的日期/时间,如图所示。