tsibble v0.8.2


Monthly downloads



Tidy Temporal Data Frames and Tools

Provides a 'tbl_ts' class (the 'tsibble') to store and manage temporal data in a data-centric format, which is built on top of the 'tibble'. The 'tsibble' aims at easily manipulating and analysing temporal data, including counting and filling in time gaps, aggregate over calendar periods, performing rolling window calculations, and etc.



Travis-CI Build
Status AppVeyor Build
Status Coverage
Status CRAN\_Status\_Badge Downloads

The tsibble package provides a data class of tbl_ts to represent tidy temporal data. A tsibble consists of a time index, key and other measured variables in a data-centric format, which is built on top of the tibble.


You could install the stable version on CRAN:


You could install the development version from Github using

# install.packages("remotes")

Get started

Coerce to a tsibble with as_tsibble()

The weather data included in the package nycflights13 is used as an example to illustrate. The “index” variable is the time_hour containing the date-times, and the “key” is the origin as weather stations. The key together with the index uniquely identifies each observation, which gives a valid tsibble. Other columns can be considered as measured variables.

weather <- nycflights13::weather %>% 
  select(origin, time_hour, temp, humid, precip)
weather_tsbl <- as_tsibble(weather, key = origin, index = time_hour)
#> # A tsibble: 26,115 x 5 [1h] <America/New_York>
#> # Key:       origin [3]
#>   origin time_hour            temp humid precip
#>   <chr>  <dttm>              <dbl> <dbl>  <dbl>
#> 1 EWR    2013-01-01 01:00:00  39.0  59.4      0
#> 2 EWR    2013-01-01 02:00:00  39.0  61.6      0
#> 3 EWR    2013-01-01 03:00:00  39.0  64.4      0
#> 4 EWR    2013-01-01 04:00:00  39.9  62.2      0
#> 5 EWR    2013-01-01 05:00:00  39.0  64.4      0
#> # … with 2.611e+04 more rows

The key is comprised of one or more variables. See package?tsibble and vignette("intro-tsibble") for details.

Tsibble internally computes the interval for given time indices based on the time representation, ranging from year to nanosecond, from numerics to ordered factors. The POSIXct corresponds to sub-daily series, Date to daily, yearweek to weekly, yearmonth to monthly, yearquarter to quarterly, and etc.

fill_gaps() to turn implicit missing values into explicit missing values

Often there are implicit missing cases in time series. If the observations are made at regular time interval, we could turn these implicit missingness to be explicit simply using fill_gaps(), filling gaps in precipitation (precip) with 0 in the meanwhile. It is quite common to replaces NAs with its previous observation for each origin in time series analysis, which is easily done using fill() from tidyr.

full_weather <- weather_tsbl %>%
  fill_gaps(precip = 0) %>% 
  group_by_key() %>% 
  tidyr::fill(temp, humid, .direction = "down")
#> # A tsibble: 26,190 x 5 [1h] <America/New_York>
#> # Key:       origin [3]
#> # Groups:    origin [3]
#>   origin time_hour            temp humid precip
#>   <chr>  <dttm>              <dbl> <dbl>  <dbl>
#> 1 EWR    2013-01-01 01:00:00  39.0  59.4      0
#> 2 EWR    2013-01-01 02:00:00  39.0  61.6      0
#> 3 EWR    2013-01-01 03:00:00  39.0  64.4      0
#> 4 EWR    2013-01-01 04:00:00  39.9  62.2      0
#> 5 EWR    2013-01-01 05:00:00  39.0  64.4      0
#> # … with 2.618e+04 more rows

fill_gaps() also handles filling in time gaps by values or functions, and respects time zones for date-times. Wanna a quick overview of implicit missing values? Check out vignette("implicit-na").

index_by() + summarise() to aggregate over calendar periods

index_by() is the counterpart of group_by() in temporal context, but it groups the index only. In conjunction with index_by(), summarise() and its scoped variants aggregate interested variables over calendar periods. index_by() goes hand in hand with the index functions including as.Date(), yearweek(), yearmonth(), and yearquarter(), as well as other friends from lubridate. For example, it would be of interest in computing average temperature and total precipitation per month, by applying yearmonth() to the hourly time index.

full_weather %>%
  group_by_key() %>%
  index_by(year_month = yearmonth(time_hour)) %>% # monthly aggregates
    avg_temp = mean(temp, na.rm = TRUE),
    ttl_precip = sum(precip, na.rm = TRUE)
#> # A tsibble: 36 x 4 [1M]
#> # Key:       origin [3]
#>   origin year_month avg_temp ttl_precip
#>   <chr>       <mth>    <dbl>      <dbl>
#> 1 EWR      2013 Jan     35.6       3.53
#> 2 EWR      2013 Feb     34.2       3.83
#> 3 EWR      2013 Mar     40.1       3   
#> 4 EWR      2013 Apr     53.0       1.47
#> 5 EWR      2013 May     63.3       5.44
#> # … with 31 more rows

While collapsing rows (like summarise()), group_by() and index_by() will take care of updating the key and index respectively. This index_by() + summarise() combo can help with regularising a tsibble of irregular time space too.

A family of window functions: slide(), tile(), stretch()

Time series often involves moving window calculations. Several functions in tsibble allow for different variations of moving windows using purrr-like syntax:

  • slide()/slide2()/pslide(): sliding window with overlapping observations.
  • tile()/tile2()/ptile(): tiling window without overlapping observations.
  • stretch()/stretch2()/pstretch(): fixing an initial window and expanding to include more observations.
Rolling window animation

For example, a moving average of window size 3 is carried out on hourly temperatures for each group (origin).

full_weather %>% 
  group_by_key() %>% 
  mutate(temp_ma = slide_dbl(temp, ~ mean(., na.rm = TRUE), .size = 3))
#> # A tsibble: 26,190 x 6 [1h] <America/New_York>
#> # Key:       origin [3]
#> # Groups:    origin [3]
#>   origin time_hour            temp humid precip temp_ma
#>   <chr>  <dttm>              <dbl> <dbl>  <dbl>   <dbl>
#> 1 EWR    2013-01-01 01:00:00  39.0  59.4      0    NA  
#> 2 EWR    2013-01-01 02:00:00  39.0  61.6      0    NA  
#> 3 EWR    2013-01-01 03:00:00  39.0  64.4      0    39.0
#> 4 EWR    2013-01-01 04:00:00  39.9  62.2      0    39.3
#> 5 EWR    2013-01-01 05:00:00  39.0  64.4      0    39.3
#> # … with 2.618e+04 more rows

Looking for rolling in parallel? Their multiprocessing equivalents are prefixed with future_. More examples can be found at vignette("window").

More about tsibble

  • Tsibble also serves as a natural input for forecasting and many other downstream analytical tasks. Stay tuned for tidyverts.org.
  • The short article describes the overall philosophy and design of tsibble.

Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

Functions in tsibble

Name Description
fill_gaps Turn implicit missing values into explicit missing values
is_tsibble If the object is a tsibble
group_by_key Group by key variables
guess_frequency Guess a time frequency from other index objects
filter_index A shorthand for filtering time index for a tsibble
future_slide() Sliding window in parallel
tile2 Tiling window calculation over multiple inputs simultaneously
key_data Keying data
tile Tiling window calculation
key Return key variables
key_drop_default Default value for .drop argument for key
future_stretch() Stretching window in parallel
has_gaps Does a tsibble have implicit gaps in time?
pedestrian Pedestrian counts in the city of Melbourne
partial_slider Partially splits the input to a list according to the rolling window size.
index Return index variable from a tsibble
new_tsibble Create a subclass of a tsibble
new_interval Create a time interval
slide_tsibble Perform sliding windows on a tsibble by row
index_by Group by time index and collapse with summarise()
new_data New tsibble data and append new observations to a tsibble
measures Return measured variables
interval Meta-information of a tsibble
slider Splits the input to a list according to the rolling window size.
tsibble-tidyverse Tidyverse methods for tsibble
tile_tsibble Perform tiling windows on a tsibble by row
tiler Splits the input to a list according to the tiling window size.
slide Sliding window calculation
future_tile() Tiling window in parallel
index_valid Add custom index support for a tsibble
interval_pull Pull time interval from a vector
tsibble Create a tsibble object
holiday_aus Australian national and state-based public holiday
stretch Stretching window calculation
scan_gaps Scan a tsibble for implicit missing observations
yearweek Represent year-week (ISO) starting on Monday, year-month or year-quarter objects
unnest_tsibble Unnest a data frame consisting of tsibbles to a tsibble
stretch2 Stretching window calculation over multiple simultaneously
units_since Time units since Unix Epoch
stretch_tsibble Perform stretching windows on a tsibble by row
slide2 Sliding window calculation over multiple inputs simultaneously
stretcher Split the input to a list according to the stretching window size.
update_tsibble Update key and index for a tsibble
reexports Objects exported from other packages
tourism Australian domestic overnight trips
time_in If time falls in the ranges using compact expressions
time_unit Extract time unit from a vector
tsibble-package tsibble: tidy temporal data frames and tools
is_duplicated Test duplicated observations determined by key and index variables
difference Lagged differences
as.tsibble Deprecated functions
as_tibble.tbl_ts Coerce to a tibble or data frame
as_tsibble Coerce to a tsibble object
as.ts.tbl_ts Coerce a tsibble to a time series
build_tsibble Low-level constructor for a tsibble object
build_tsibble_meta Low-level & high-performance constructor for a tsibble object
count_gaps Count implicit gaps
No Results!

Vignettes of tsibble

No Results!

Last month downloads


Type Package
License GPL-3
URL https://tsibble.tidyverts.org
BugReports https://github.com/tidyverts/tsibble/issues
LinkingTo Rcpp (>= 0.12.0)
VignetteBuilder knitr
ByteCompile true
Encoding UTF-8
Language en-GB
LazyData true
RoxygenNote 6.1.1
NeedsCompilation yes
Packaged 2019-06-10 09:48:05 UTC; earo
Repository CRAN
Date/Publication 2019-06-10 10:20:03 UTC

Include our badge in your README