Skip to contents

get_prev_dates() identifies the previous test date for individual subjects and timepoints in a longitudinal study.

add_prev_date() interpolates these previous test dates into a data frame for further analysis.

Usage

add_prev_date(
  object,
  subject = "subject",
  timepoint = "timepoint",
  result = "result"
)

get_prev_date(
  object,
  subject = "subject",
  timepoint = "timepoint",
  result = "result"
)

Arguments

object

a data.frame (or object coercible by as.data.frame() to a data frame) containing the data to be analysed.

subject

character, name of the column (of type integer or factor) identifying individual study subjects; default "subject".

timepoint

character, name of the column recording time points (as Dates) of testing of subjects; default "timepoint".

result

character, name of the column (of type ordered factor) recording test results; default "result".

Value

add_prev_date()

A data.frame based on object, with an added column of class Date containing the values of the previous test dates.

get_prev_date()

An vector of length nrow(object), class Date, containing the values of the previous test dates ordered in the exact sequence of the subject and timepoint in object.

Details

See Transitions details.

See also

Examples



 ## Continuing example from `add_transitions()`
  # subject, timepoint and result arguments all defaults and required types
Blackmore |> str()
#> 'data.frame':	945 obs. of  6 variables:
#>  $ subject  : Factor w/ 231 levels "100","101","102",..: 1 1 1 1 1 2 2 2 2 2 ...
#>  $ age      : num  8 10 12 14 15.9 ...
#>  $ exercise : num  2.71 1.94 2.36 1.54 8.63 0.14 0.14 0 0 5.08 ...
#>  $ group    : Factor w/ 2 levels "control","patient": 2 2 2 2 2 2 2 2 2 2 ...
#>  $ timepoint: Date, format: "2008-01-01" "2009-12-31" ...
#>  $ result   : Ord.factor w/ 15 levels "<=2"<"<=4"<"<=6"<..: 2 1 2 1 5 1 1 1 1 3 ...

  # Integer vector of the previous test dates
get_prev_date(Blackmore)
#>   [1] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#>   [6] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#>  [11] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#>  [16] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#>  [21] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#>  [26] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#>  [31] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#>  [36] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#>  [41] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#>  [46] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#>  [51] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#>  [56] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#>  [61] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#>  [66] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#>  [71] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#>  [76] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#>  [81] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#>  [86] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#>  [91] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#>  [96] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [101] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [106] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [111] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [116] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [121] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [126] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [131] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [136] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [141] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [146] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [151] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [156] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [161] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [166] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [171] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [176] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [181] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [186] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [191] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [196] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [201] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [206] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [211] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [216] "2009-12-31" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [221] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [226] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [231] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [236] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [241] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [246] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [251] "2014-01-01" NA           "2008-01-01" "2009-12-31" NA          
#> [256] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [261] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [266] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [271] "2009-12-31" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [276] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [281] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [286] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [291] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [296] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [301] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [306] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [311] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [316] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [321] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [326] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [331] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [336] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [341] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [346] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [351] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [356] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [361] "2009-12-31" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [366] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [371] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [376] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [381] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [386] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [391] "2012-01-01" NA           "2008-01-01" "2009-12-31" NA          
#> [396] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [401] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [406] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [411] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [416] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [421] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [426] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [431] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [436] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [441] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [446] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [451] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [456] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [461] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [466] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [471] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [476] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [481] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [486] "2009-12-31" NA           "2008-01-01" "2009-12-31" NA          
#> [491] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [496] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [501] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [506] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [511] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [516] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [521] "2009-12-31" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [526] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [531] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [536] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [541] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [546] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [551] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [556] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [561] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [566] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [571] "2012-01-01" NA           "2008-01-01" "2009-12-31" NA          
#> [576] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [581] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [586] "2009-12-31" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [591] "2014-01-01" NA           "2008-01-01" "2009-12-31" NA          
#> [596] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [601] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [606] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [611] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [616] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [621] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [626] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [631] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [636] "2009-12-31" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [641] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [646] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [651] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [656] "2009-12-31" NA           "2008-01-01" "2009-12-31" NA          
#> [661] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [666] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [671] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [676] "2009-12-31" NA           "2008-01-01" NA           "2008-01-01"
#> [681] "2009-12-31" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [686] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [691] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [696] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [701] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [706] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [711] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [716] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [721] "2014-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [726] "2014-01-01" NA           "2008-01-01" "2009-12-31" NA          
#> [731] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [736] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [741] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [746] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [751] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [756] "2009-12-31" NA           "2008-01-01" "2009-12-31" NA          
#> [761] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [766] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [771] "2009-12-31" "2012-01-01" "2014-01-01" NA           "2008-01-01"
#> [776] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [781] "2012-01-01" NA           "2008-01-01" "2009-12-31" NA          
#> [786] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [791] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [796] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [801] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"
#> [806] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [811] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [816] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [821] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [826] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [831] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [836] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [841] "2009-12-31" NA           "2008-01-01" "2009-12-31" NA          
#> [846] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [851] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [856] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [861] "2012-01-01" NA           "2008-01-01" "2009-12-31" NA          
#> [866] "2008-01-01" "2009-12-31" "2012-01-01" NA           "2008-01-01"
#> [871] "2009-12-31" "2012-01-01" NA           "2008-01-01" "2009-12-31"
#> [876] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [881] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [886] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [891] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [896] "2012-01-01" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [901] NA           "2008-01-01" "2009-12-31" NA           "2008-01-01"
#> [906] "2009-12-31" NA           "2008-01-01" "2009-12-31" "2012-01-01"
#> [911] NA           "2008-01-01" "2009-12-31" "2012-01-01" NA          
#> [916] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [921] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [926] "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01" NA          
#> [931] "2008-01-01" "2009-12-31" NA           "2008-01-01" "2009-12-31"
#> [936] "2012-01-01" "2014-01-01" NA           "2008-01-01" "2009-12-31"
#> [941] NA           "2008-01-01" "2009-12-31" "2012-01-01" "2014-01-01"

  # Add column of  previous test dates to data frame
add_prev_date(Blackmore) |> head(32)
#>    subject   age exercise   group  timepoint result  prev_date
#> 1      100  8.00     2.71 patient 2008-01-01    <=4       <NA>
#> 2      100 10.00     1.94 patient 2009-12-31    <=2 2008-01-01
#> 3      100 12.00     2.36 patient 2012-01-01    <=4 2009-12-31
#> 4      100 14.00     1.54 patient 2014-01-01    <=2 2012-01-01
#> 5      100 15.92     8.63 patient 2015-12-03   <=10 2014-01-01
#> 6      101  8.00     0.14 patient 2008-01-01    <=2       <NA>
#> 7      101 10.00     0.14 patient 2009-12-31    <=2 2008-01-01
#> 8      101 12.00     0.00 patient 2012-01-01    <=2 2009-12-31
#> 9      101 14.00     0.00 patient 2014-01-01    <=2 2012-01-01
#> 10     101 16.67     5.08 patient 2016-09-02    <=6 2014-01-01
#> 11     102  8.00     0.92 patient 2008-01-01    <=2       <NA>
#> 12     102 10.00     1.82 patient 2009-12-31    <=2 2008-01-01
#> 13     102 12.00     4.75 patient 2012-01-01    <=6 2009-12-31
#> 14     102 15.08    24.72 patient 2015-01-30   <=26 2012-01-01
#> 15     103  8.00     1.04 patient 2008-01-01    <=2       <NA>
#> 16     103 10.00     2.90 patient 2009-12-31    <=4 2008-01-01
#> 17     103 12.00     2.65 patient 2012-01-01    <=4 2009-12-31
#> 18     103 14.08     6.86 patient 2014-01-30    <=8 2012-01-01
#> 19     104  8.00     2.75 patient 2008-01-01    <=4       <NA>
#> 20     104 10.00     6.62 patient 2009-12-31    <=8 2008-01-01
#> 21     104 12.00     0.29 patient 2012-01-01    <=2 2009-12-31
#> 22     104 15.42    12.37 patient 2015-06-03   <=14 2012-01-01
#> 23     105  8.00     0.05 patient 2008-01-01    <=2       <NA>
#> 24     105 10.00     0.00 patient 2009-12-31    <=2 2008-01-01
#> 25     105 12.00     0.00 patient 2012-01-01    <=2 2009-12-31
#> 26     105 14.00     0.25 patient 2014-01-01    <=2 2012-01-01
#> 27     105 16.17     1.44 patient 2016-03-03    <=2 2014-01-01
#> 28     106  8.00     0.00 patient 2008-01-01    <=2       <NA>
#> 29     106 10.00     0.46 patient 2009-12-31    <=2 2008-01-01
#> 30     106 12.00     0.12 patient 2012-01-01    <=2 2009-12-31
#> 31     106 14.00     1.34 patient 2014-01-01    <=2 2012-01-01
#> 32     106 16.33     4.83 patient 2016-05-01    <=6 2014-01-01

rm(Blackmore)

###
## Example on formatting numeric values as R dates

#  Data frame containing year as numeric: 2018 to 2025
(df <- data.frame(
    subject = rep(1001:1003),
    timepoint = rep(2018:2025, each = 3),
    result = gl(3, 4, lab = c("jolly", "good", "show"), ordered = TRUE)
    ))
#>    subject timepoint result
#> 1     1001      2018  jolly
#> 2     1002      2018  jolly
#> 3     1003      2018  jolly
#> 4     1001      2019  jolly
#> 5     1002      2019   good
#> 6     1003      2019   good
#> 7     1001      2020   good
#> 8     1002      2020   good
#> 9     1003      2020   show
#> 10    1001      2021   show
#> 11    1002      2021   show
#> 12    1003      2021   show
#> 13    1001      2022  jolly
#> 14    1002      2022  jolly
#> 15    1003      2022  jolly
#> 16    1001      2023  jolly
#> 17    1002      2023   good
#> 18    1003      2023   good
#> 19    1001      2024   good
#> 20    1002      2024   good
#> 21    1003      2024   show
#> 22    1001      2025   show
#> 23    1002      2025   show
#> 24    1003      2025   show

#  Convert to R dates
df <- transform(df,
           timepoint = as.Date(paste(timepoint, "01", "01", sep = "-"))
      )

  # Add column of test result transitions (defaults: cap = 0, modulate = 0)
(df <- add_transitions(df))
#>    subject  timepoint result transition
#> 1     1001 2018-01-01  jolly         NA
#> 2     1002 2018-01-01  jolly         NA
#> 3     1003 2018-01-01  jolly         NA
#> 4     1001 2019-01-01  jolly          0
#> 5     1002 2019-01-01   good          1
#> 6     1003 2019-01-01   good          1
#> 7     1001 2020-01-01   good          1
#> 8     1002 2020-01-01   good          0
#> 9     1003 2020-01-01   show          1
#> 10    1001 2021-01-01   show          1
#> 11    1002 2021-01-01   show          1
#> 12    1003 2021-01-01   show          0
#> 13    1001 2022-01-01  jolly         -2
#> 14    1002 2022-01-01  jolly         -2
#> 15    1003 2022-01-01  jolly         -2
#> 16    1001 2023-01-01  jolly          0
#> 17    1002 2023-01-01   good          1
#> 18    1003 2023-01-01   good          1
#> 19    1001 2024-01-01   good          1
#> 20    1002 2024-01-01   good          0
#> 21    1003 2024-01-01   show          1
#> 22    1001 2025-01-01   show          1
#> 23    1002 2025-01-01   show          1
#> 24    1003 2025-01-01   show          0

# Format R dates just to show the year
transform(df, timepoint = format(timepoint, "%Y"))
#>    subject timepoint result transition
#> 1     1001      2018  jolly         NA
#> 2     1002      2018  jolly         NA
#> 3     1003      2018  jolly         NA
#> 4     1001      2019  jolly          0
#> 5     1002      2019   good          1
#> 6     1003      2019   good          1
#> 7     1001      2020   good          1
#> 8     1002      2020   good          0
#> 9     1003      2020   show          1
#> 10    1001      2021   show          1
#> 11    1002      2021   show          1
#> 12    1003      2021   show          0
#> 13    1001      2022  jolly         -2
#> 14    1002      2022  jolly         -2
#> 15    1003      2022  jolly         -2
#> 16    1001      2023  jolly          0
#> 17    1002      2023   good          1
#> 18    1003      2023   good          1
#> 19    1001      2024   good          1
#> 20    1002      2024   good          0
#> 21    1003      2024   show          1
#> 22    1001      2025   show          1
#> 23    1002      2025   show          1
#> 24    1003      2025   show          0

#  Data frame containing year and month as numeric: July 2024 to June 2025
(df <- data.frame(
           subject = 1001:1002,
           year = rep(2024:2025, each = 12),
           month = rep(c(7:12, 1:6), each = 2),
           result = gl(2, 3, lab = c("low", "high"), ordered = TRUE)
       ))
#>    subject year month result
#> 1     1001 2024     7    low
#> 2     1002 2024     7    low
#> 3     1001 2024     8    low
#> 4     1002 2024     8   high
#> 5     1001 2024     9   high
#> 6     1002 2024     9   high
#> 7     1001 2024    10    low
#> 8     1002 2024    10    low
#> 9     1001 2024    11    low
#> 10    1002 2024    11   high
#> 11    1001 2024    12   high
#> 12    1002 2024    12   high
#> 13    1001 2025     1    low
#> 14    1002 2025     1    low
#> 15    1001 2025     2    low
#> 16    1002 2025     2   high
#> 17    1001 2025     3   high
#> 18    1002 2025     3   high
#> 19    1001 2025     4    low
#> 20    1002 2025     4    low
#> 21    1001 2025     5    low
#> 22    1002 2025     5   high
#> 23    1001 2025     6   high
#> 24    1002 2025     6   high

#  Convert to R dates
df <- transform(df, timepoint = as.Date(paste(year, month, "01", sep = "-")))

  # Add column of test result transitions (defaults: cap = 0, modulate = 0)
(df <- add_transitions(df))
#>    subject result  timepoint transition
#> 1     1001    low 2024-07-01         NA
#> 2     1002    low 2024-07-01         NA
#> 3     1001    low 2024-08-01          0
#> 4     1002   high 2024-08-01          1
#> 5     1001   high 2024-09-01          1
#> 6     1002   high 2024-09-01          0
#> 7     1001    low 2024-10-01         -1
#> 8     1002    low 2024-10-01         -1
#> 9     1001    low 2024-11-01          0
#> 10    1002   high 2024-11-01          1
#> 11    1001   high 2024-12-01          1
#> 12    1002   high 2024-12-01          0
#> 13    1001    low 2025-01-01         -1
#> 14    1002    low 2025-01-01         -1
#> 15    1001    low 2025-02-01          0
#> 16    1002   high 2025-02-01          1
#> 17    1001   high 2025-03-01          1
#> 18    1002   high 2025-03-01          0
#> 19    1001    low 2025-04-01         -1
#> 20    1002    low 2025-04-01         -1
#> 21    1001    low 2025-05-01          0
#> 22    1002   high 2025-05-01          1
#> 23    1001   high 2025-06-01          1
#> 24    1002   high 2025-06-01          0

# Format R dates just to show the month and year
transform(df, timepoint = format(timepoint, "%b-%Y"))
#>    subject result timepoint transition
#> 1     1001    low  Jul-2024         NA
#> 2     1002    low  Jul-2024         NA
#> 3     1001    low  Aug-2024          0
#> 4     1002   high  Aug-2024          1
#> 5     1001   high  Sep-2024          1
#> 6     1002   high  Sep-2024          0
#> 7     1001    low  Oct-2024         -1
#> 8     1002    low  Oct-2024         -1
#> 9     1001    low  Nov-2024          0
#> 10    1002   high  Nov-2024          1
#> 11    1001   high  Dec-2024          1
#> 12    1002   high  Dec-2024          0
#> 13    1001    low  Jan-2025         -1
#> 14    1002    low  Jan-2025         -1
#> 15    1001    low  Feb-2025          0
#> 16    1002   high  Feb-2025          1
#> 17    1001   high  Mar-2025          1
#> 18    1002   high  Mar-2025          0
#> 19    1001    low  Apr-2025         -1
#> 20    1002    low  Apr-2025         -1
#> 21    1001    low  May-2025          0
#> 22    1002   high  May-2025          1
#> 23    1001   high  Jun-2025          1
#> 24    1002   high  Jun-2025          0

rm(df)