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.