Tsibble interoperability

The tsibble package represents tidy temporal data as tbl_ts objects with a declared key (e.g. subject) and index (time). tidyILD works on ordinary tibbles with provenance in attributes; when you start from a tbl_ts, tidyILD records formal tsibble semantics so you can inspect them and round-trip back to a tsibble where appropriate.

This vignette requires the tsibble package (install.packages("tsibble")). Chunks below run only when tsibble is available.

Ingesting a tsibble with ild_prepare()

Pass a tbl_ts to ild_prepare() in either of these ways:

  1. Omit id and time — tidyILD infers the subject column from the tsibble key (exactly one key column) and the time column from the index.
  2. Supply id and time — names must match the key and index columns; the input must still be a tbl_ts.

The tbl_ts class is not kept on the result: the prepared object is a tibble with ILD structure (.ild_* columns, etc.). Tsibble-specific information is copied into the tidyILD attribute before coercion.

suppressPackageStartupMessages({
  library(tidyILD)
  library(tsibble)
})
t <- seq.POSIXt(as.POSIXct("2020-01-01", tz = "UTC"), by = "hour", length.out = 4)
d <- tsibble(
  id = rep(1L, 4),
  t = t,
  y = 1:4,
  key = id,
  index = t
)
x <- ild_prepare(d)
class(x)
#> [1] "tidyild_df" "ild_tbl"    "tbl_df"     "tbl"        "data.frame"

What provenance is kept

When the source was a tbl_ts, metadata is stored under attr(x, "tidyILD")$tsibble. The exported reader is ild_tsibble_meta(), which returns NULL if the object was not prepared from a tsibble.

Typical fields include:

  • key_vars, index_var — names of the subject and time columns.
  • interval_format — human-readable summary of the declared tsibble::interval() (when available).
  • is_regular — tsibble’s regularity flag at input time.
  • index_type, tsibble_version, source_class — for reporting and reproducibility.
str(ild_tsibble_meta(x), max.level = 1)
#> List of 7
#>  $ source_class   : chr "tbl_ts"
#>  $ key_vars       : chr "id"
#>  $ index_var      : chr "t"
#>  $ interval_format: chr "1h"
#>  $ is_regular     : logi TRUE
#>  $ tsibble_version: chr "1.2.0"
#>  $ index_type     : chr "name"

ild_spacing() may include a tsibble sub-list that bridges the declared tsibble interval/regularity to empirical spacing computed from .ild_dt after ild_prepare() (sorting, duplicate handling, etc.). Declared and empirical summaries can diverge if rows change.

sp <- ild_spacing(x)
names(sp$tsibble)
#> NULL

How to inspect

  • ild_tsibble_meta(x) — full tsibble provenance list (or NULL).
  • ild_summary(x) — when tsibble metadata exists, the summary includes a tsibble element (same content as ild_tsibble_meta()).
  • ild_spacing(x)$tsibble — declared vs empirical spacing bridge (when present).
names(ild_summary(x))
#> [1] "summary"    "n_units"    "n_obs"      "time_range" "spacing"   
#> [6] "n_gaps"     "pct_gap"    "tsibble"
ild_summary(x)$tsibble[c("key_vars", "index_var", "interval_format", "is_regular")]
#> $key_vars
#> [1] "id"
#> 
#> $index_var
#> [1] "t"
#> 
#> $interval_format
#> [1] "1h"
#> 
#> $is_regular
#> [1] TRUE

Round-trip with ild_as_tsibble()

ild_as_tsibble(x) builds a tbl_ts from the prepared tibble using ild_meta() for key and index column names. If ild_tsibble_meta(x) is not NULL, regular is set from the stored is_regular so tsibble::interval() often matches the original for data that was unchanged after ild_prepare().

d2 <- ild_as_tsibble(x)
tsibble::interval(d2)
#> <interval[1]>
#> [1] 1h
identical(tsibble::interval(d), tsibble::interval(d2))
#> [1] TRUE

You can pass extra arguments through to tsibble::as_tsibble() (e.g. override regular).

Limitations and policy

  • One-key policy: ild_prepare() accepts a tbl_ts with exactly one key column (the subject id). Multiple keys (e.g. country + person) are not supported; reshape or aggregate first.
  • Class is dropped: Output is not a tbl_ts; use ild_as_tsibble() when you need tsibble semantics again.
  • Pre- vs post-prepare divergence: Declared interval and regularity describe the input tbl_ts. After ild_prepare(), empirical spacing (gaps, irregularity) comes from .ild_dt. Sorting, duplicate removal, or row drops can make ild_as_tsibble()’s reconstruction not regular even when the source was; in that case a warning may be emitted when reconstructed regularity disagrees with stored provenance.

For normative developer detail, see vignette("developer-contracts", package = "tidyILD") and inst/dev/DEVELOPER_CONTRACTS.md (tsibble section). Related: vignette("ild-decomposition-and-spacing", package = "tidyILD") for spacing tools.