2012-07-04 84 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非常緩慢。 –