nano_ceiling | R Documentation |
nanotime
typeThe functions nano_floor
and nano_ceiling
round down or up, respectively. Although
the underlying implementation of nanotime
has negative numbers for values before
1970-01-01 UTC, the rounding is always done backward in time for nano_floor
and forward
in time for nano_ceiling
. The functions take a nanotime
argument x
which is
the instance to round, together with a second argument precision
which indicates an
arbitrary precision to which the rounding should be performed. This argument can be either a
nanoduration
or or a nanoperiod
. In the latter case, the argument tz
must
also be specified in order to give the nanoperiod
a meaning. Finally, the nanotime
argument origin
can be optionally specified to fix the rounding to a specific point in
time.
nano_ceiling(x, precision, ...)
nano_floor(x, precision, ...)
## S4 method for signature 'nanotime,nanoduration'
nano_ceiling(x, precision, origin = nanotime())
## S4 method for signature 'nanotime,nanoduration'
nano_floor(x, precision, origin = nanotime())
## S4 method for signature 'nanotime,nanoperiod'
nano_ceiling(x, precision, origin = nanotime(), tz)
## S4 method for signature 'nanotime,nanoperiod'
nano_floor(x, precision, origin = nanotime(), tz)
x |
a |
precision |
a |
... |
for future additional arguments |
origin |
a |
tz |
a |
This flexible rounding must be understood in the context of a vector. The rounding precision can
then be considered as an interval that defines a grid over which the elements are either
assigned to the starting value of the interval to which they belong (nano_floor
) or the
ending value of the interval to which they belong (nano_ceiling
). This allows for a
grouping of a nanotime
vector on which a statistic may then be run. In the examples
below, such a use case is shown in the context of a data.table
object.
If "business" concepts such as month or days are needed, the argument
precision must be
of type period
. It is then mandatory to specify the timezone argument tz
as this
ensures timezone correctness of the intervals including for example for the rare hourly
transitions of some countries going from a timezone with a whole hour difference with UTC to one
with a fractional hour difference. In the case of a period
, the functions align the
rounding if the precision is an integer divisor of a larger quantity. For instance, if one
specifies a rounding of 6 hours, a divisor of a day, the hours are aligned on days and the
rounding is made to a grid at hours 0, 6, 12 and 18 in the specified timezone. If the precision
is not a divisor, the grid is aligned to the nearest hour before the first element of the vector
to round.
The argument origin
controls the reference point of the rounding, allowing arbitrary
specification of the reference point of the rounding.
## Not run:
## "classic" rounding:
nano_floor(as.nanotime("2010-10-10 11:12:15 UTC"), as.nanoduration("01:00:00"))
## rounding with arbitrary precision:
nano_floor(as.nanotime("2010-10-10 11:12:15 UTC"), as.nanoduration("06:00:00"))
nano_floor(as.nanotime("2010-10-10 11:23:15 UTC"), as.nanoduration("00:15:00"))
nano_ceiling(as.nanotime("2010-10-10 11:23:15 UTC"), as.nanoduration("01:15:23"))
## controlling the reference point via the 'origin' argument:
nano_ceiling(as.nanotime("2010-10-10 11:23:15 UTC"),
as.nanoduration("01:15:23"),
origin=as.nanotime("2010-10-10 11:23:15 UTC"))
## using business concepts and rounding across a daylight saving change:
v <- seq(as.nanotime("2020-03-08 America/New_York"),
by=as.nanoperiod("06:00:00"), length.out=8, tz="America/New_York")
print(nano_floor(v, as.nanoperiod("1d"), tz="America/New_York"), tz="America/New_York")
## using the concept in a 'data.table':
library(data.table)
n <- 3 * 24
idx <- seq(as.nanotime("2020-03-07 America/New_York"),
by=as.nanoperiod("01:00:00"), length.out=n, tz="America/New_York")
dt <- data.table(idx, a=1:n, b=2:(n+1))
dt_mean <- dt[, list(mean = mean(a)),
by=nano_ceiling(idx, as.nanoperiod("1d"), tz="America/New_York")]
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.