With any table object containing date or date-time columns, these values can
be precisely shifted with tt_time_shift() and specification of the time
shift. We can either provide a string with the time shift components and the
shift direction (like "-4y 10d") or a difftime object (which can be
created via lubridate expressions or by using the base::difftime()
function).
Arguments
- tbl
A data table
obj:<tbl_*>// requiredA table object to be used as input for the transformation. This can be a data frame, a tibble, a
tbl_dbiobject, or atbl_sparkobject.- time_shift
Time-shift specification
scalar<character>// default:"0y 0m 0d 0H 0M 0S"Either a character-based representation that specifies the time difference by which all time values in time-based columns will be shifted, or, a
difftimeobject. The character string is constructed in the format"0y 0m 0d 0H 0M 0S"and individual time components can be omitted (i.e.,"1y 5d"is a valid specification of shifting time values ahead one year and five days). Adding a"-"at the beginning of the string (e.g.,"-2y") will shift time values back.
Value
A data frame, a tibble, a tbl_dbi object, or a tbl_spark object
depending on what was provided as tbl.
Details
The time_shift specification cannot have a higher time granularity than the
least granular time column in the input table. Put in simpler terms, if there
are any date-based based columns (or just a single date-based column) then
the time shifting can only be in terms of years, months, and days. Using a
time_shift specification of "20d 6H" in the presence of any dates will
result in a truncation to "20d". Similarly, a difftime object will be
altered in the same circumstances, however, the object will resolved to an
exact number of days through rounding.
Examples
Let's use the game_revenue dataset, included in the pointblank package,
as the input table for the first demo. It has entries in the first 21 days of
2015 and we'll move all of the date and date-time values to the beginning of
2021 with the tt_time_shift() function and the "6y" time_shift
specification.
tt_time_shift(
tbl = game_revenue,
time_shift = "6y"
)
#> # A tibble: 2,000 x 11
#> player_id session_id session_start time item_type
#> <chr> <chr> <dttm> <dttm> <chr>
#> 1 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 01:31:03 2021-01-01 01:31:27 iap
#> 2 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 01:31:03 2021-01-01 01:36:57 iap
#> 3 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 01:31:03 2021-01-01 01:37:45 iap
#> 4 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 01:31:03 2021-01-01 01:42:33 ad
#> 5 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 11:50:02 2021-01-01 11:55:20 ad
#> 6 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 11:50:02 2021-01-01 12:08:56 ad
#> 7 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 11:50:02 2021-01-01 12:14:08 ad
#> 8 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 11:50:02 2021-01-01 12:21:44 ad
#> 9 ECPANOIXLZHF896 ECPANOIXLZ~ 2021-01-01 11:50:02 2021-01-01 12:24:20 ad
#> 10 FXWUORGYNJAE271 FXWUORGYNJ~ 2021-01-01 15:17:18 2021-01-01 15:19:36 ad
#> # i 1,990 more rows
#> # i 6 more variables: item_name <chr>, item_revenue <dbl>,
#> # session_duration <dbl>, start_day <date>, acquisition <chr>, country <chr>Keeping only the date_time and a-f columns of small_table, also
included in the package, shift the times back 2 days and 12 hours with the
"-2d 12H" specification.
small_table %>%
dplyr::select(-date) %>%
tt_time_shift("-2d 12H")
#> # A tibble: 13 x 7
#> date_time a b c d e f
#> <dttm> <int> <chr> <dbl> <dbl> <lgl> <chr>
#> 1 2016-01-01 23:00:00 2 1-bcd-345 3 3423. TRUE high
#> 2 2016-01-01 12:32:00 3 5-egh-163 8 10000. TRUE low
#> 3 2016-01-03 01:32:00 6 8-kdg-938 3 2343. TRUE high
#> 4 2016-01-04 05:23:00 2 5-jdo-903 NA 3892. FALSE mid
#> 5 2016-01-07 00:36:00 8 3-ldm-038 7 284. TRUE low
#> 6 2016-01-08 18:15:00 4 2-dhe-923 4 3291. TRUE mid
#> 7 2016-01-13 06:46:00 7 1-knw-093 3 843. TRUE high
#> 8 2016-01-14 23:27:00 4 5-boe-639 2 1036. FALSE low
#> 9 2016-01-17 16:30:00 3 5-bce-642 9 838. FALSE high
#> 10 2016-01-17 16:30:00 3 5-bce-642 9 838. FALSE high
#> 11 2016-01-24 08:07:00 4 2-dmx-010 7 834. TRUE low
#> 12 2016-01-25 14:51:00 2 7-dmx-010 8 108. FALSE low
#> 13 2016-01-27 23:23:00 1 3-dka-303 NA 2230. TRUE highSee also
Other Table Transformers:
get_tt_param(),
tt_string_info(),
tt_summary_stats(),
tt_tbl_colnames(),
tt_tbl_dims(),
tt_time_slice()