The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
The problem arises when we have to use time-series in a data.frame or use time-series operations like lag
and diff
for numeric vectors in a data.frame. Let’s look into an example.
library(transx)
First, wee restrict tibble printing options to minimize the space occupied.
library(dplyr)
options(tibble.print_min = 3)
Let’s load the economics dataset from ggplot2
for illustration.
<- ggplot2::economics
econ
econ#> # A tibble: 574 x 6
#> date pce pop psavert uempmed unemploy
#> <date> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1967-07-01 507. 198712 12.6 4.5 2944
#> 2 1967-08-01 510. 198911 12.6 4.7 2945
#> 3 1967-09-01 516. 199113 11.9 4.6 2958
#> # ... with 571 more rows
Then, we are going to use some stats
functions:
mutate(econ, pop_lag = stats::lag(as.ts(pop)))
#> # A tibble: 574 x 7
#> date pce pop psavert uempmed unemploy pop_lag
#> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1967-07-01 507. 198712 12.6 4.5 2944 198712
#> 2 1967-08-01 510. 198911 12.6 4.7 2945 198911
#> 3 1967-09-01 516. 199113 11.9 4.6 2958 199113
#> # ... with 571 more rows
base::lag
only works on ts
objects. However, dplyr has thought about this problem
mutate(econ, pop_lag = dplyr::lag(pop))
#> # A tibble: 574 x 7
#> date pce pop psavert uempmed unemploy pop_lag
#> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1967-07-01 507. 198712 12.6 4.5 2944 NA
#> 2 1967-08-01 510. 198911 12.6 4.7 2945 198712
#> 3 1967-09-01 516. 199113 11.9 4.6 2958 198911
#> # ... with 571 more rows
However, this problem extends to all the univariate functions that are applied in the same manner in a data.frame. For example
mutate(econ, pop_diff = base::diff(pop))
#> Error: Problem with `mutate()` input `pop_diff`.
#> x Input `pop_diff` can't be recycled to size 574.
#> i Input `pop_diff` is `base::diff(pop)`.
#> i Input `pop_diff` must be size 574 or 1, not 573.
The idea for transx
is coming from the need to construct wrapper functions.
<- function(x, ...) x - dplyr::lag(x, ... )
diffx
mutate(econ, pop_diff = diffx(pop))
#> # A tibble: 574 x 7
#> date pce pop psavert uempmed unemploy pop_diff
#> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1967-07-01 507. 198712 12.6 4.5 2944 NA
#> 2 1967-08-01 510. 198911 12.6 4.7 2945 199
#> 3 1967-09-01 516. 199113 11.9 4.6 2958 202
#> # ... with 571 more rows
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.