2012-07-04 2 views
22

현재 빌드중인 패키지의 날짜와 시간을 많이 사용하고 있습니다.기본 R 기능이있는 POSIX 날짜 (POSIXct)를 반올림하십시오.

post에 걸림돌이되는 것은 contrib 패키지로 전환하기 전에 기본 R 기능으로 수행 할 수있는 작업이 있는지 일반적으로 확인하는 것이 좋지 않다는 것을 다시 상기시켜줍니다.

따라서 기본 R 기능이있는 POSIXct 클래스의 날짜를 반올림 할 수 있습니까?

나는이 내가이 할 수있는 알고

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" 

을 (의사 코드)를 수행하고 싶은 것입니다

[1] round.Date  round.timeDate* 

    Non-visible functions are asterisked 

"전용"나에게 준

methods(round) 

을 확인 timeDate, lubridate 등으로 할 수 있지만 패키지 종속성을 유지하고 싶습니다. 따라서 각 패키지의 소스 코드를 확인하기 전에 누군가가 이미 이와 같은 작업을 수행했는지 묻습니다.

답변

34

base에는 이렇게하기 위해 round.POSIXt이 있습니다. 왜 그것이 methods으로 오지 않는지 확실하지 않습니다. lubridate이 주제에

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

, 또한 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

floor_date가 너무 느리기 때문에 POSIXct에 대한 월 반올림을 사용할 수 있었으면 좋겠다. –