我有一个POSIXct值的向量,我想将它们舍入到最近的四分之一小时.我不关心这一天.如何将值转换为小时和分钟?
例如,我想要的价值
"2012-05-30 20:41:21 UTC"
Run Code Online (Sandbox Code Playgroud)
成为
"20:45"
Run Code Online (Sandbox Code Playgroud)
小智 22
实际上,到目前为止,一个老问题和一些有用的答案.giraffhere的最后一个似乎是最优雅的.但是,不是floor_date而是round_date,它可以解决这个问题:
lubridate::round_date(x, "15 minutes")
Run Code Online (Sandbox Code Playgroud)
Pie*_*nte 21
你可以用round.诀窍是在舍入之前除以900秒(15分钟*60秒)并在之后乘以900:
a <-as.POSIXlt("2012-05-30 20:41:21 UTC")
b <-as.POSIXlt(round(as.double(a)/(15*60))*(15*60),origin=(as.POSIXlt('1970-01-01')))
b
[1] "2012-05-30 20:45:00 EDT"
Run Code Online (Sandbox Code Playgroud)
要获得时间和分钟,只需使用格式
format(b,"%H:%M")
[1] "20:45"
as.character(format(b,"%H:%M"))
[1] "20:45"
Run Code Online (Sandbox Code Playgroud)
shh*_*its 14
就像是
format(strptime("1970-01-01", "%Y-%m-%d", tz="UTC") + round(as.numeric(your.time)/900)*900,"%H:%M")
Run Code Online (Sandbox Code Playgroud)
会工作
gir*_*ere 13
老问题,但是要注意lubridate包现在可以轻松处理floor_date.要将POSIXct对象的矢量切割为15分钟的间隔,请使用这样的方法.
x <- lubridate::floor_date(x, "15 minutes")
编辑:由用户@ user3297928注释,lubridate::round_date(x, "15 minutes")用于舍入到最近的15分钟.它上面的楼层.
您可以使用align.timexts 包中的函数来处理舍入,然后format返回字符串“HH:MM”:
R> library(xts)
R> p <- as.POSIXct("2012-05-30 20:41:21", tz="UTC")
R> a <- align.time(p, n=60*15) # n is in seconds
R> format(a, "%H:%M")
[1] "20:45"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16283 次 |
| 最近记录: |