问题描述
我正在尝试将字符串转换为POSIXct,以便使用lubridate将时间四舍五入到最近的四分之一小时。下面是代码:
x <- c("8:00","14:47","21:13","01:47","00:19")
x <- paste0(x,":00")
x <- chron(times. = x)
as.POSIXct(x,"%H:%M:%S")
我得到以下内容
as.POSIXct.default(x,“%H:%M:%S”)中的错误: 不知道如何将“ x”转换为“ POSIXct”类
解决方法
您可以将时间转换为分钟,然后round
将其转换为整整十五分钟,然后将数字时间转换为POSIXct
。最后,strftime
为您提供了所需的格式。
x <- c("8:00","14:47","21:13","01:47","00:19")
tmp <- t(sapply(strsplit(x,":"),as.numeric))
minutes <- tmp[,2] + tmp[,1]*60
strftime(as.POSIXct((round(minutes/15)*15)/(15*4)*60^2,origin=Sys.Date(),tz="GMT"),"%H:%M:%S",tz="GMT")
# [1] "08:00:00" "14:45:00" "21:15:00" "01:45:00" "00:15:00"