我需要将日期时间列转换为特定格式,"%Y-%m-%d %H:%M:%S"
转换为"%Y-%m-%d %H"
。
例如:
library(lubridate)
#input
dates <- as_datetime(c("2018-06-22 18:19:04", "2018-06-22 19:58:04","2018-06-22 19:30:08", "2018-06-22 16:46:00", "2018-06-22 16:45:04"))
#output
dates_mod <- as_datetime(c("2018-06-22 18:00:00", "2018-06-22 19:00:00","2018-06-22 19:00:00", "2018-06-22 16:00:00", "2018-06-22 16:00:00"))
答案 0 :(得分:1)
这是您需要的吗?
> trunc(dates, "hours")
[1] "2018-06-22 18:00:00 UTC" "2018-06-22 19:00:00 UTC" "2018-06-22 19:00:00 UTC"
[4] "2018-06-22 16:00:00 UTC" "2018-06-22 16:00:00 UTC"
答案 1 :(得分:0)
这也可以:
lubridate::floor_date(dates,"hours")
# [1] "2018-06-22 18:00:00 UTC" "2018-06-22 19:00:00 UTC" "2018-06-22 19:00:00 UTC"
# [4] "2018-06-22 16:00:00 UTC" "2018-06-22 16:00:00 UTC"
floor_date
与trunc.Date
类似,但是您可以进行其他一些整洁的操作,例如floor_date (dates,"3 hours")
来按时间范围舍入。
它还支持更多时间单位,完整列表为(?floor_date
):
秒,分钟,小时,天,周,月,双月,季度,季节, 半年和一年
虽然trunc支持(?trunc.Date
):
秒,分钟,小时,天,月或年
使用format
format.Date(dates,"%Y-%m-%d %H:00:00 %Z")
# [1] "2018-06-22 18:00:00 UTC" "2018-06-22 19:00:00 UTC" "2018-06-22 19:00:00 UTC"
# [4] "2018-06-22 16:00:00 UTC" "2018-06-22 16:00:00 UTC"
您确实不应该使用某些骇人听闻的解决方案,但是它很好地展示了ymd_h
lubridate::ymd_h(gsub("......$","",dates))
# [1] "2018-06-22 18:00:00 UTC" "2018-06-22 19:00:00 UTC" "2018-06-22 19:00:00 UTC"
# [4] "2018-06-22 16:00:00 UTC" "2018-06-22 16:00:00 UTC"