2012-07-04 37 views
22

我目前玩的日期和时间很多,我正在建设一个包。围绕一个POSIX日期(POSIXct)与基地R功能

绊倒这个post再次提醒我,在转向contrib包之前查看是否可以使用基本R功能完成某些功能通常不是一个坏主意。

因此,是否有可能用基本R功能舍入类POSIXct的日期?

我检查

methods(round) 

这 “只” 给了我

[1] round.Date  round.timeDate* 

    Non-visible functions are asterisked 

这是我想要做的(伪代码)

x <- as.POSIXct(Sys.time()) 
[1] "2012-07-04 10:33:55 CEST" 

round(x, atom="minute") 
[1] "2012-07-04 10:34:00 CEST" 

round(x, atom="hour") 
[1] "2012-07-04 11:00:00 CEST" 

round(x, atom="day") 
[1] "2012-07-04 CEST" 

我知道这是什么用timeDate,lubridate等来完成,但我想保持包依赖关系。因此,在继续检查各个软件包的源代码之前,我想我会问是否有人已经做了这样的事情。

回答

34

baseround.POSIXt要做到这一点。不知道为什么它没有拿出methods

x <- as.POSIXct(Sys.time()) 
x 
[1] "2012-07-04 10:01:08 BST" 
round(x,"mins") 
[1] "2012-07-04 10:01:00 BST" 
round(x,"hours") 
[1] "2012-07-04 10:00:00 BST" 
round(x,"days") 
[1] "2012-07-04" 
+0

巨大作用,但奇怪的是不必须每周,每月或每年四舍五入;对于我的情况,我将不得不与@nzcoops答案 – chepyle

12

在这个主题与lubridate,也考虑了ceiling_date()floor_date()功能:

x <- as.POSIXct("2009-08-03 12:01:59.23") 
ceiling_date(x, "second") 
# "2009-08-03 12:02:00 CDT" 
ceiling_date(x, "hour") 
# "2009-08-03 13:00:00 CDT" 
ceiling_date(x, "day") 
# "2009-08-04 CDT" 
ceiling_date(x, "week") 
# "2009-08-09 CDT" 
ceiling_date(x, "month") 
# "2009-09-01 CDT" 
+1

我希望POSIXct的月份舍入可用,因为floor_date非常缓慢。 –