vec-rep {vctrs} | R Documentation |
Repeat a vector
Description
-
vec_rep()
repeats an entire vector a set number oftimes
. -
vec_rep_each()
repeats each element of a vector a set number oftimes
. -
vec_unrep()
compresses a vector with repeated values. The repeated values are returned as akey
alongside the number oftimes
each key is repeated.
Usage
vec_rep(
x,
times,
...,
error_call = current_env(),
x_arg = "x",
times_arg = "times"
)
vec_rep_each(
x,
times,
...,
error_call = current_env(),
x_arg = "x",
times_arg = "times"
)
vec_unrep(x)
Arguments
x |
A vector. |
times |
For For |
... |
These dots are for future extensions and must be empty. |
error_call |
The execution environment of a currently
running function, e.g. |
x_arg , times_arg |
Argument names for errors. |
Details
Using vec_unrep()
and vec_rep_each()
together is similar to using
base::rle()
and base::inverse.rle()
. The following invariant shows
the relationship between the two functions:
compressed <- vec_unrep(x) identical(x, vec_rep_each(compressed$key, compressed$times))
There are two main differences between vec_unrep()
and base::rle()
:
-
vec_unrep()
treats adjacent missing values as equivalent, whilerle()
treats them as different values. -
vec_unrep()
works along the size ofx
, whilerle()
works along its length. This means thatvec_unrep()
works on data frames by compressing repeated rows.
Value
For vec_rep()
, a vector the same type as x
with size
vec_size(x) * times
.
For vec_rep_each()
, a vector the same type as x
with size
sum(vec_recycle(times, vec_size(x)))
.
For vec_unrep()
, a data frame with two columns, key
and times
. key
is a vector with the same type as x
, and times
is an integer vector.
Dependencies
Examples
# Repeat the entire vector
vec_rep(1:2, 3)
# Repeat within each vector
vec_rep_each(1:2, 3)
x <- vec_rep_each(1:2, c(3, 4))
x
# After using `vec_rep_each()`, you can recover the original vector
# with `vec_unrep()`
vec_unrep(x)
df <- data.frame(x = 1:2, y = 3:4)
# `rep()` repeats columns of data frames, and returns lists
rep(df, each = 2)
# `vec_rep()` and `vec_rep_each()` repeat rows, and return data frames
vec_rep(df, 2)
vec_rep_each(df, 2)
# `rle()` treats adjacent missing values as different
y <- c(1, NA, NA, 2)
rle(y)
# `vec_unrep()` treats them as equivalent
vec_unrep(y)