타임 스탬프 된 데이터에 대한 모델링을 예측하는 동안 R을 사용하여 (아마도 data.table을 사용하여) X 시간으로 날짜를 반올림하는 함수를 작성하려고합니다. 예 : 2시간으로 라운딩이 제공해야 할 때를 라운드 1 시간 그것은 할 매우 쉽게R에서 X 시간만큼 반올림?
"2014-12-28 22:59:00 EDT" becomes "2014-12-28 22:00:00 EDT"
"2014-12-28 23:01:00 EDT" becomes "2014-12-29 00:00:00 EDT"
-round.POSIXt(.date, "hour")
기능을 사용. 나는 여러 if
문을 사용하여 아래 일 것 같은
, 일반적인 기능을 쓰기는하지만 매우 추한됩니다 :
d7.dateRoundByHour <- function (.date, byHours) {
if (byHours == 1)
return (round.POSIXt(.date, "hour"))
hh = hour(.date); dd = mday(.date); mm = month(.date); yy = year(.date)
hh = round(hh/byHours,digits=0) * byHours
if (hh>=24) {
hh=0; dd=dd+1
}
if ((mm==2 & dd==28) |
(mm %in% c(1,3,5,7,8,10,12) & dd==31) |
(mm %in% c(2,4,6,9,11) & dd==30)) { # NB: it won't work on 29 Feb leap year.
dd=1; mm=mm+1
}
if (mm==13) {
mm=1; yy=yy+1
}
str = sprintf("%i-%02.0f-%02.0f %02.0f:%02.0f:%02.0f EDT", yy,mm,dd, hh,0,0)
as.POSIXct(str, format="%Y-%m-%d %H:%M:%S")
}
누구나 그렇게 할 수있는 더 좋은 방법을 보일 수 있는가?
(아마도 수치로 변환하여 다시 POSIXt 또는 일부 다른 기능 POSIXt? 행)
패키지'highfrequency'는 원하는 결과를 제공해야하는'aggregatets()'래퍼를 가지고 있습니다 – Rime