Break a vector into blocks
block()
breaks up the i
-ndex by period
, and then uses that to define
the indices to chop x
with.
For example, it can split x
into monthly or yearly blocks. Combined with
purrr::map()
, it is a way to iterate over a vector in "time blocks".
block(x, i, period, every = 1L, origin = NULL)
x |
The vector to block. |
i |
The datetime index to block by. There are 3 restrictions on the index:
|
period |
A string defining the period to group by. Valid inputs can be roughly broken into:
|
every |
The number of periods to group together. For example, if the period was set to |
origin |
The reference date time value. The default when left as This is generally used to define the anchor time to count from, which is
relevant when the every value is |
block()
determines the indices to block by with warp::warp_boundary()
,
and splits x
by those indices using vctrs::vec_chop()
.
Like slide()
, block()
splits data frame x
values row wise.
A vector fulfilling the following invariants:
vec_size(block(x)) == vec_size(unique(warp::warp_boundary(i)))
vec_ptype(block(x)) == list()
vec_ptype(block(x)[[1]]) == vec_ptype(x)
x <- 1:6 i <- as.Date("2019-01-01") + c(-2:2, 31) block(i, i, period = "year") # Data frames are split row wise df <- data.frame(x = x, i = i) block(df, i, period = "month") # Iterate over these blocks to apply a function over # non-overlapping period blocks. For example, to compute a # mean over yearly or monthly blocks. vapply(block(x, i, "year"), mean, numeric(1)) vapply(block(x, i, "month"), mean, numeric(1)) # block by every 2 months, ensuring that we start counting # the 1st of the 2 months from `2019-01-01` block(i, i, period = "month", every = 2, origin = as.Date("2019-01-01")) # Use the `origin` to instead start counting from `2018-12-01`, meaning # that [2018-12, 2019-01] gets bucketed together. block(i, i, period = "month", every = 2, origin = as.Date("2018-12-01"))
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.