# cgmguru: Examples Gallery

# Overview

This vignette renders and runs the example scripts provided in the package’s `/inst/examples/` directory, so you can see inputs, outputs, and typical workflows in one HTML document.

If you are viewing this from RStudio Help, use the “Open in Browser” button for the best experience.

## Notes

- Code is executed by sourcing the example scripts directly from `/inst/examples/`.
- Some examples may take longer on large datasets.
- Figures may be produced where applicable.

## GRID

    source(file.path(examples_dir, "grid.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > grid_result <- grid(example_data_5_subject, gap = 15,
    #> +     threshold = 130)
    #>
    #> > print(grid_result$episode_counts)
    #> # A tibble: 5 × 2
    #>   id        episode_counts
    #>   <chr>              <int>
    #> 1 Subject 1             10
    #> 2 Subject 2             22
    #> 3 Subject 3              7
    #> 4 Subject 4             18
    #> 5 Subject 5             42
    #>
    #> > print(grid_result$episode_start)
    #> # A tibble: 99 × 4
    #>    id        time                   gl indices
    #>    <chr>     <dttm>              <dbl>   <int>
    #>  1 Subject 1 2015-06-11 15:30:07   143     966
    #>  2 Subject 1 2015-06-11 17:10:07   157     985
    #>  3 Subject 1 2015-06-11 22:00:06   135    1038
    #>  4 Subject 1 2015-06-11 22:25:06   162    1043
    #>  5 Subject 1 2015-06-12 07:40:04   160    1154
    #>  6 Subject 1 2015-06-13 16:34:59   132    1415
    #>  7 Subject 1 2015-06-14 17:39:55   176    1676
    #>  8 Subject 1 2015-06-16 19:14:47   166    2222
    #>  9 Subject 1 2015-06-18 14:29:40   187    2720
    #> 10 Subject 1 2015-06-18 18:19:39   132    2765
    #> # ℹ 89 more rows
    #>
    #> > print(grid_result$grid_vector)
    #> # A tibble: 13,866 × 1
    #>     grid
    #>    <int>
    #>  1     0
    #>  2     0
    #>  3     0
    #>  4     0
    #>  5     0
    #>  6     0
    #>  7     0
    #>  8     0
    #>  9     0
    #> 10     0
    #> # ℹ 13,856 more rows
    #>
    #> > sensitive_result <- grid(example_data_5_subject, gap = 10,
    #> +     threshold = 120)
    #>
    #> > large_grid <- grid(example_data_hall, gap = 15, threshold = 130)
    #>
    #> > print(paste("Detected", sum(large_grid$episode_counts$episode_counts),
    #> +     "episodes"))
    #> [1] "Detected 79 episodes"
    #>
    #> > print(large_grid$episode_start)
    #> # A tibble: 79 × 4
    #>    id          time                   gl indices
    #>    <chr>       <dttm>              <dbl>   <int>
    #>  1 1636-69-001 2014-02-04 07:47:05   138     336
    #>  2 1636-69-001 2014-02-04 17:42:03   138     455
    #>  3 1636-69-001 2014-02-05 08:41:59   137     635
    #>  4 1636-69-001 2015-03-29 14:33:30   137     786
    #>  5 1636-69-001 2015-03-30 10:53:25   132     979
    #>  6 1636-69-001 2015-03-31 09:18:19   143    1202
    #>  7 1636-69-001 2015-03-31 13:58:18   136    1258
    #>  8 1636-69-001 2015-04-01 16:58:12   132    1581
    #>  9 1636-69-026 2015-11-24 14:37:18   142    2011
    #> 10 1636-69-026 2015-11-24 23:32:16   139    2118
    #> # ℹ 69 more rows
    #>
    #> > print(large_grid$grid_vector)
    #> # A tibble: 34,890 × 1
    #>     grid
    #>    <int>
    #>  1     0
    #>  2     0
    #>  3     0
    #>  4     0
    #>  5     0
    #>  6     0
    #>  7     0
    #>  8     0
    #>  9     0
    #> 10     0
    #> # ℹ 34,880 more rows

## Detect all events

    source(file.path(examples_dir, "detect_all_events.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > all_events <- detect_all_events(example_data_5_subject,
    #> +     reading_minutes = 5)
    #>
    #> > print(all_events)
    #> # A tibble: 40 × 6
    #>    id        type  level    total_episodes avg_ep_per_day avg_episode_duration…¹
    #>    <chr>     <chr> <chr>             <int>          <dbl>                  <dbl>
    #>  1 Subject 1 hypo  lv1                   1           0.08                      0
    #>  2 Subject 1 hypo  lv2                   0           0                         0
    #>  3 Subject 1 hypo  extended              0           0                         0
    #>  4 Subject 1 hypo  lv1_excl              1           0.08                      0
    #>  5 Subject 1 hyper lv1                  14           1.1                       0
    #>  6 Subject 1 hyper lv2                   2           0.16                      0
    #>  7 Subject 1 hyper extended              0           0                         0
    #>  8 Subject 1 hyper lv1_excl             12           0.95                      0
    #>  9 Subject 2 hypo  lv1                   0           0                         0
    #> 10 Subject 2 hypo  lv2                   0           0                         0
    #> # ℹ 30 more rows
    #> # ℹ abbreviated name: ¹​avg_episode_duration_below_54
    #>
    #> > large_all_events <- detect_all_events(example_data_hall,
    #> +     reading_minutes = 5)
    #>
    #> > print(paste("Total event types analyzed:", nrow(large_all_events)))
    #> [1] "Total event types analyzed: 152"
    #>
    #> > hyperglycemia_events <- all_events[all_events$type ==
    #> +     "hyper", ]
    #>
    #> > hypoglycemia_events <- all_events[all_events$type ==
    #> +     "hypo", ]
    #>
    #> > print("Hyperglycemia events:")
    #> [1] "Hyperglycemia events:"
    #>
    #> > print(hyperglycemia_events)
    #> # A tibble: 20 × 6
    #>    id        type  level    total_episodes avg_ep_per_day avg_episode_duration…¹
    #>    <chr>     <chr> <chr>             <int>          <dbl>                  <dbl>
    #>  1 Subject 1 hyper lv1                  14           1.1                       0
    #>  2 Subject 1 hyper lv2                   2           0.16                      0
    #>  3 Subject 1 hyper extended              0           0                         0
    #>  4 Subject 1 hyper lv1_excl             12           0.95                      0
    #>  5 Subject 2 hyper lv1                  17           1.02                      0
    #>  6 Subject 2 hyper lv2                  18           1.08                      0
    #>  7 Subject 2 hyper extended              9           0.54                      0
    #>  8 Subject 2 hyper lv1_excl              0           0                         0
    #>  9 Subject 3 hyper lv1                   8           1.39                      0
    #> 10 Subject 3 hyper lv2                   4           0.69                      0
    #> 11 Subject 3 hyper extended              2           0.35                      0
    #> 12 Subject 3 hyper lv1_excl              4           0.69                      0
    #> 13 Subject 4 hyper lv1                  13           1.01                      0
    #> 14 Subject 4 hyper lv2                   0           0                         0
    #> 15 Subject 4 hyper extended              0           0                         0
    #> 16 Subject 4 hyper lv1_excl             13           1.01                      0
    #> 17 Subject 5 hyper lv1                  34           3.21                      0
    #> 18 Subject 5 hyper lv2                  17           1.6                       0
    #> 19 Subject 5 hyper extended             10           0.94                      0
    #> 20 Subject 5 hyper lv1_excl             17           1.6                       0
    #> # ℹ abbreviated name: ¹​avg_episode_duration_below_54
    #>
    #> > print("Hypoglycemia events:")
    #> [1] "Hypoglycemia events:"
    #>
    #> > print(hypoglycemia_events)
    #> # A tibble: 20 × 6
    #>    id        type  level    total_episodes avg_ep_per_day avg_episode_duration…¹
    #>    <chr>     <chr> <chr>             <int>          <dbl>                  <dbl>
    #>  1 Subject 1 hypo  lv1                   1           0.08                      0
    #>  2 Subject 1 hypo  lv2                   0           0                         0
    #>  3 Subject 1 hypo  extended              0           0                         0
    #>  4 Subject 1 hypo  lv1_excl              1           0.08                      0
    #>  5 Subject 2 hypo  lv1                   0           0                         0
    #>  6 Subject 2 hypo  lv2                   0           0                         0
    #>  7 Subject 2 hypo  extended              0           0                         0
    #>  8 Subject 2 hypo  lv1_excl              0           0                         0
    #>  9 Subject 3 hypo  lv1                   1           0.17                      0
    #> 10 Subject 3 hypo  lv2                   0           0                         0
    #> 11 Subject 3 hypo  extended              0           0                         0
    #> 12 Subject 3 hypo  lv1_excl              1           0.17                      0
    #> 13 Subject 4 hypo  lv1                   2           0.16                      5
    #> 14 Subject 4 hypo  lv2                   0           0                         0
    #> 15 Subject 4 hypo  extended              0           0                         0
    #> 16 Subject 4 hypo  lv1_excl              2           0.16                      0
    #> 17 Subject 5 hypo  lv1                   1           0.09                      0
    #> 18 Subject 5 hypo  lv2                   0           0                         0
    #> 19 Subject 5 hypo  extended              0           0                         0
    #> 20 Subject 5 hypo  lv1_excl              1           0.09                      0
    #> # ℹ abbreviated name: ¹​avg_episode_duration_below_54

## Detect hyperglycemic events

    source(file.path(examples_dir, "detect_hyperglycemic_events.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > hyper_lv1 <- detect_hyperglycemic_events(example_data_5_subject,
    #> +     start_gl = 180, dur_length = 15, end_length = 15, end_gl = 180)
    #>
    #> > print(hyper_lv1$events_total)
    #> # A tibble: 5 × 3
    #>   id        total_events avg_ep_per_day
    #>   <chr>            <int>          <dbl>
    #> 1 Subject 1           14           1.1
    #> 2 Subject 2           17           1.02
    #> 3 Subject 3            8           1.39
    #> 4 Subject 4           13           1.01
    #> 5 Subject 5           34           3.21
    #>
    #> > hyper_lv2 <- detect_hyperglycemic_events(example_data_5_subject,
    #> +     start_gl = 250, dur_length = 15, end_length = 15, end_gl = 250)
    #>
    #> > print(hyper_lv2$events_total)
    #> # A tibble: 5 × 3
    #>   id        total_events avg_ep_per_day
    #>   <chr>            <int>          <dbl>
    #> 1 Subject 1            2           0.16
    #> 2 Subject 2           18           1.08
    #> 3 Subject 3            4           0.69
    #> 4 Subject 4            0           0
    #> 5 Subject 5           17           1.6
    #>
    #> > hyper_extended <- detect_hyperglycemic_events(example_data_5_subject)
    #>
    #> > large_hyper <- detect_hyperglycemic_events(example_data_hall,
    #> +     start_gl = 180, dur_length = 15, end_length = 15, end_gl = 180)
    #>
    #> > print(paste("Total hyperglycemic events:", sum(large_hyper$events_total$total_events)))
    #> [1] "Total hyperglycemic events: 47"
    #>
    #> > if (nrow(hyper_lv1$events_detailed) > 0) {
    #> +     first_subject <- hyper_lv1$events_detailed$id[1]
    #> +     subject_events <- hyper_lv1$events_detailed[hyper_lv1$events_detailed$id ==
    #> +         first_subject, ]
    #> +     head(subject_events)
    #> + }
    #> # A tibble: 6 × 7
    #>   id        start_time          start_glucose end_time            end_glucose
    #>   <chr>     <dttm>                      <dbl> <dttm>                    <dbl>
    #> 1 Subject 1 2015-06-11 15:45:07           194 2015-06-11 17:10:07         157
    #> 2 Subject 1 2015-06-11 17:25:07           195 2015-06-11 20:05:06         142
    #> 3 Subject 1 2015-06-11 22:35:06           187 2015-06-12 00:05:06         151
    #> 4 Subject 1 2015-06-12 07:50:04           181 2015-06-12 09:35:04         164
    #> 5 Subject 1 2015-06-13 17:04:59           181 2015-06-13 18:40:00         155
    #> 6 Subject 1 2015-06-13 19:44:59           223 2015-06-13 20:49:58         158
    #> # ℹ 2 more variables: start_indices <int>, end_indices <int>

## Detect hypoglycemic events

    source(file.path(examples_dir, "detect_hypoglycemic_events.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > hypo_lv1 <- detect_hypoglycemic_events(example_data_5_subject,
    #> +     start_gl = 70, dur_length = 15, end_length = 15)
    #>
    #> > print(hypo_lv1$events_total)
    #> # A tibble: 5 × 3
    #>   id        total_events avg_ep_per_day
    #>   <chr>            <int>          <dbl>
    #> 1 Subject 1            1           0.08
    #> 2 Subject 2            0           0
    #> 3 Subject 3            1           0.17
    #> 4 Subject 4            2           0.16
    #> 5 Subject 5            1           0.09
    #>
    #> > hypo_lv2 <- detect_hypoglycemic_events(example_data_5_subject,
    #> +     start_gl = 54, dur_length = 15, end_length = 15)
    #>
    #> > hypo_extended <- detect_hypoglycemic_events(example_data_5_subject)
    #>
    #> > large_hypo <- detect_hypoglycemic_events(example_data_hall,
    #> +     start_gl = 70, dur_length = 15, end_length = 15)
    #>
    #> > print(paste("Total hypoglycemic events:", sum(large_hypo$events_total$total_events)))
    #> [1] "Total hypoglycemic events: 45"
    #>
    #> > cat("Level 1 events:", sum(hypo_lv1$events_total$total_events),
    #> +     "\n")
    #> Level 1 events: 5
    #>
    #> > cat("Level 2 events:", sum(hypo_lv2$events_total$total_events),
    #> +     "\n")
    #> Level 2 events: 0

## Excursion

    source(file.path(examples_dir, "excursion.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > excursion_result <- excursion(example_data_5_subject,
    #> +     gap = 15)
    #>
    #> > print(paste("Excursion vector length:", length(excursion_result$excursion_vector)))
    #> [1] "Excursion vector length: 1"
    #>
    #> > print(excursion_result$episode_counts)
    #> # A tibble: 5 × 2
    #>   id        episode_counts
    #>   <chr>              <int>
    #> 1 Subject 1              9
    #> 2 Subject 2             14
    #> 3 Subject 3             11
    #> 4 Subject 4             17
    #> 5 Subject 5             34
    #>
    #> > excursion_30min <- excursion(example_data_5_subject,
    #> +     gap = 30)
    #>
    #> > large_excursion <- excursion(example_data_hall, gap = 15)
    #>
    #> > print(paste("Excursion vector length in larger dataset:",
    #> +     length(large_excursion$excursion_vector)))
    #> [1] "Excursion vector length in larger dataset: 1"
    #>
    #> > print(paste("Total episodes:", sum(large_excursion$episode_counts$episode_counts)))
    #> [1] "Total episodes: 111"

## Local maxima

    source(file.path(examples_dir, "find_local_maxima.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > maxima_result <- find_local_maxima(example_data_5_subject)
    #>
    #> > print(paste("Found", nrow(maxima_result$local_maxima_vector),
    #> +     "local maxima"))
    #> [1] "Found 1602 local maxima"
    #>
    #> > large_maxima <- find_local_maxima(example_data_hall)
    #>
    #> > print(paste("Found", nrow(large_maxima$local_maxima_vector),
    #> +     "local maxima in larger dataset"))
    #> [1] "Found 4991 local maxima in larger dataset"
    #>
    #> > head(maxima_result$local_maxima_vector)
    #> # A tibble: 6 × 1
    #>   local_maxima
    #>          <int>
    #> 1            8
    #> 2           23
    #> 3           24
    #> 4           65
    #> 5           70
    #> 6           77
    #>
    #> > head(maxima_result$merged_results)
    #> # A tibble: 6 × 3
    #>   id        time                   gl
    #>   <chr>     <dttm>              <dbl>
    #> 1 Subject 1 2015-06-06 18:05:27   159
    #> 2 Subject 1 2015-06-06 20:15:27   174
    #> 3 Subject 1 2015-06-06 20:20:26   174
    #> 4 Subject 1 2015-06-07 01:20:26    88
    #> 5 Subject 1 2015-06-07 01:45:25    92
    #> 6 Subject 1 2015-06-07 02:20:25    92

## Max after hours

    source(file.path(examples_dir, "find_max_after_hours.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > start_indices <- seq(1, nrow(example_data_5_subject),
    #> +     by = 100)
    #>
    #> > start_points <- data.frame(start_indices = start_indices)
    #>
    #> > max_after <- find_max_after_hours(example_data_5_subject,
    #> +     start_points, hours = 2)
    #>
    #> > print(paste("Found", length(max_after$max_indices),
    #> +     "maximum points"))
    #> [1] "Found 1 maximum points"
    #>
    #> > max_after_1h <- find_max_after_hours(example_data_5_subject,
    #> +     start_points, hours = 1)
    #>
    #> > large_start_indices <- seq(1, nrow(example_data_hall),
    #> +     by = 200)
    #>
    #> > large_start_points <- data.frame(start_indices = large_start_indices)
    #>
    #> > large_max_after <- find_max_after_hours(example_data_hall,
    #> +     large_start_points, hours = 2)
    #>
    #> > print(paste("Found", length(large_max_after$max_indices),
    #> +     "maximum points in larger dataset"))
    #> [1] "Found 1 maximum points in larger dataset"

## Max before hours

    source(file.path(examples_dir, "find_max_before_hours.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > start_indices <- seq(1, nrow(example_data_5_subject),
    #> +     by = 100)
    #>
    #> > start_points <- data.frame(start_indices = start_indices)
    #>
    #> > max_before <- find_max_before_hours(example_data_5_subject,
    #> +     start_points, hours = 2)
    #>
    #> > print(paste("Found", length(max_before$max_indices),
    #> +     "maximum points"))
    #> [1] "Found 1 maximum points"
    #>
    #> > max_before_1h <- find_max_before_hours(example_data_5_subject,
    #> +     start_points, hours = 1)
    #>
    #> > large_start_indices <- seq(1, nrow(example_data_hall),
    #> +     by = 200)
    #>
    #> > large_start_points <- data.frame(start_indices = large_start_indices)
    #>
    #> > large_max_before <- find_max_before_hours(example_data_hall,
    #> +     large_start_points, hours = 2)
    #>
    #> > print(paste("Found", length(large_max_before$max_indices),
    #> +     "maximum points in larger dataset"))
    #> [1] "Found 1 maximum points in larger dataset"

## Min after hours

    source(file.path(examples_dir, "find_min_after_hours.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > start_indices <- seq(1, nrow(example_data_5_subject),
    #> +     by = 100)
    #>
    #> > start_points <- data.frame(start_indices = start_indices)
    #>
    #> > min_after <- find_min_after_hours(example_data_5_subject,
    #> +     start_points, hours = 2)
    #>
    #> > print(paste("Found", length(min_after$min_indices),
    #> +     "minimum points"))
    #> [1] "Found 1 minimum points"
    #>
    #> > min_after_1h <- find_min_after_hours(example_data_5_subject,
    #> +     start_points, hours = 1)
    #>
    #> > large_start_indices <- seq(1, nrow(example_data_hall),
    #> +     by = 200)
    #>
    #> > large_start_points <- data.frame(start_indices = large_start_indices)
    #>
    #> > large_min_after <- find_min_after_hours(example_data_hall,
    #> +     large_start_points, hours = 2)
    #>
    #> > print(paste("Found", length(large_min_after$min_indices),
    #> +     "minimum points in larger dataset"))
    #> [1] "Found 1 minimum points in larger dataset"

## Min before hours

    source(file.path(examples_dir, "find_min_before_hours.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > start_indices <- seq(1, nrow(example_data_5_subject),
    #> +     by = 100)
    #>
    #> > start_points <- data.frame(start_indices = start_indices)
    #>
    #> > min_before <- find_min_before_hours(example_data_5_subject,
    #> +     start_points, hours = 2)
    #>
    #> > print(paste("Found", length(min_before$min_indices),
    #> +     "minimum points"))
    #> [1] "Found 1 minimum points"
    #>
    #> > min_before_1h <- find_min_before_hours(example_data_5_subject,
    #> +     start_points, hours = 1)
    #>
    #> > large_start_indices <- seq(1, nrow(example_data_hall),
    #> +     by = 200)
    #>
    #> > large_start_points <- data.frame(start_indices = large_start_indices)
    #>
    #> > large_min_before <- find_min_before_hours(example_data_hall,
    #> +     large_start_points, hours = 2)
    #>
    #> > print(paste("Found", length(large_min_before$min_indices),
    #> +     "minimum points in larger dataset"))
    #> [1] "Found 1 minimum points in larger dataset"

## Maxima + GRID combined

    source(file.path(examples_dir, "maxima_grid.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > maxima_result <- maxima_grid(example_data_5_subject,
    #> +     threshold = 130, gap = 60, hours = 2)
    #>
    #> > print(maxima_result$episode_counts)
    #> # A tibble: 5 × 2
    #>   id        episode_counts
    #>   <chr>              <int>
    #> 1 Subject 1              8
    #> 2 Subject 2             18
    #> 3 Subject 3              7
    #> 4 Subject 4             16
    #> 5 Subject 5             39
    #>
    #> > print(maxima_result$results)
    #> # A tibble: 88 × 8
    #>    id        grid_time       grid_gl maxima_time maxima_glucose time_to_peak_min
    #>    <chr>     <dttm>            <dbl> <dttm>               <dbl>            <dbl>
    #>  1 Subject 1 2015-06-11 15:…     143 2015-06-11…            276               40
    #>  2 Subject 1 2015-06-11 22:…     135 2015-06-11…            209               50
    #>  3 Subject 1 2015-06-12 07:…     160 2015-06-12…            210               40
    #>  4 Subject 1 2015-06-13 16:…     132 2015-06-13…            202               60
    #>  5 Subject 1 2015-06-14 17:…     176 2015-06-14…            227               45
    #>  6 Subject 1 2015-06-16 19:…     166 2015-06-16…            208               65
    #>  7 Subject 1 2015-06-18 14:…     187 2015-06-18…            212               20
    #>  8 Subject 1 2015-06-18 18:…     132 2015-06-18…            183               35
    #>  9 Subject 2 2015-02-24 20:…     140 2015-02-24…            222               85
    #> 10 Subject 2 2015-02-25 19:…     173 2015-02-25…            273              125
    #> # ℹ 78 more rows
    #> # ℹ 2 more variables: grid_index <int>, maxima_index <int>
    #>
    #> > sensitive_maxima <- maxima_grid(example_data_5_subject,
    #> +     threshold = 120, gap = 30, hours = 1)
    #>
    #> > print(sensitive_maxima$episode_counts)
    #> # A tibble: 5 × 2
    #>   id        episode_counts
    #>   <chr>              <int>
    #> 1 Subject 1             10
    #> 2 Subject 2             19
    #> 3 Subject 3             10
    #> 4 Subject 4             20
    #> 5 Subject 5             40
    #>
    #> > print(sensitive_maxima$results)
    #> # A tibble: 99 × 8
    #>    id        grid_time       grid_gl maxima_time maxima_glucose time_to_peak_min
    #>    <chr>     <dttm>            <dbl> <dttm>               <dbl>            <dbl>
    #>  1 Subject 1 2015-06-11 15:…     143 2015-06-11…            276               40
    #>  2 Subject 1 2015-06-11 17:…     157 2015-06-11…            267               55
    #>  3 Subject 1 2015-06-11 21:…     125 2015-06-11…            209               60
    #>  4 Subject 1 2015-06-12 07:…     160 2015-06-12…            210               40
    #>  5 Subject 1 2015-06-13 16:…     124 2015-06-13…            202               65
    #>  6 Subject 1 2015-06-14 17:…     176 2015-06-14…            228               95
    #>  7 Subject 1 2015-06-16 19:…     166 2015-06-16…            208               65
    #>  8 Subject 1 2015-06-18 13:…     126 2015-06-18…            183               55
    #>  9 Subject 1 2015-06-18 14:…     187 2015-06-18…            212               20
    #> 10 Subject 1 2015-06-18 18:…     132 2015-06-18…            183               35
    #> # ℹ 89 more rows
    #> # ℹ 2 more variables: grid_index <int>, maxima_index <int>
    #>
    #> > large_maxima <- maxima_grid(example_data_hall, threshold = 130,
    #> +     gap = 60, hours = 2)
    #>
    #> > print(large_maxima$episode_counts)
    #> # A tibble: 18 × 2
    #>    id           episode_counts
    #>    <chr>                 <int>
    #>  1 1636-69-001               8
    #>  2 1636-69-026               7
    #>  3 1636-69-032               2
    #>  4 1636-69-090               3
    #>  5 1636-69-091               1
    #>  6 1636-70-1005              8
    #>  7 1636-70-1010              2
    #>  8 2133-004                  5
    #>  9 2133-015                  4
    #> 10 2133-017                  2
    #> 11 2133-018                 12
    #> 12 2133-019                  2
    #> 13 2133-021                 10
    #> 14 2133-024                  1
    #> 15 2133-027                  1
    #> 16 2133-035                  1
    #> 17 2133-036                  2
    #> 18 2133-039                  5
    #>
    #> > print(large_maxima$results)
    #> # A tibble: 76 × 8
    #>    id          grid_time     grid_gl maxima_time maxima_glucose time_to_peak_min
    #>    <chr>       <dttm>          <dbl> <dttm>               <dbl>            <dbl>
    #>  1 1636-69-001 2014-02-04 0…     138 2014-02-04…            194               30
    #>  2 1636-69-001 2014-02-04 1…     138 2014-02-04…            225               60
    #>  3 1636-69-001 2014-02-05 0…     137 2014-02-05…            196               45
    #>  4 1636-69-001 2015-03-29 1…     137 2015-03-29…            250               65
    #>  5 1636-69-001 2015-03-30 1…     132 2015-03-30…            181               45
    #>  6 1636-69-001 2015-03-31 0…     143 2015-03-31…            177               20
    #>  7 1636-69-001 2015-03-31 1…     136 2015-03-31…            169               30
    #>  8 1636-69-001 2015-04-01 1…     132 2015-04-01…            165               50
    #>  9 1636-69-026 2015-11-24 1…     142 2015-11-24…            182               40
    #> 10 1636-69-026 2015-11-24 2…     139 2015-11-25…            171               35
    #> # ℹ 66 more rows
    #> # ℹ 2 more variables: grid_index <int>, maxima_index <int>

## Ordering utility

    source(file.path(examples_dir, "orderfast.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > set.seed(123)
    #>
    #> > shuffled <- example_data_5_subject[sample(seq_len(nrow(example_data_5_subject)),
    #> +     replace = FALSE), ]
    #>
    #> > baseline <- orderfast(example_data_5_subject)
    #>
    #> > ordered_shuffled <- orderfast(shuffled)
    #>
    #> > print(paste("Identical after ordering:", identical(baseline,
    #> +     ordered_shuffled)))
    #> [1] "Identical after ordering: TRUE"
    #>
    #> > head(baseline[, c("id", "time", "gl")])
    #>          id                time  gl
    #> 1 Subject 1 2015-06-06 16:50:27 153
    #> 2 Subject 1 2015-06-06 17:05:27 137
    #> 3 Subject 1 2015-06-06 17:10:27 128
    #> 4 Subject 1 2015-06-06 17:15:28 121
    #> 5 Subject 1 2015-06-06 17:25:27 120
    #> 6 Subject 1 2015-06-06 17:45:27 138
    #>
    #> > head(ordered_shuffled[, c("id", "time", "gl")])
    #>          id                time  gl
    #> 1 Subject 1 2015-06-06 16:50:27 153
    #> 2 Subject 1 2015-06-06 17:05:27 137
    #> 3 Subject 1 2015-06-06 17:10:27 128
    #> 4 Subject 1 2015-06-06 17:15:28 121
    #> 5 Subject 1 2015-06-06 17:25:27 120
    #> 6 Subject 1 2015-06-06 17:45:27 138
    #>
    #> > ordered_large <- orderfast(example_data_hall)
    #>
    #> > print(paste("Ordered", nrow(ordered_large), "rows in larger dataset"))
    #> [1] "Ordered 34890 rows in larger dataset"

## Start finder

    source(file.path(examples_dir, "start_finder.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > binary_vector <- c(0, 0, 1, 1, 0, 1, 0, 0, 1, 1)
    #>
    #> > df <- data.frame(episode_starts = binary_vector)
    #>
    #> > start_points <- start_finder(df)
    #>
    #> > print(paste("Start indices:", paste(start_points$start_indices,
    #> +     collapse = ", ")))
    #> [1] "Start indices: 3, 6, 9"
    #>
    #> > grid_result <- grid(example_data_5_subject, gap = 15,
    #> +     threshold = 130)
    #>
    #> > grid_starts <- start_finder(grid_result$grid_vector)
    #>
    #> > print(paste("GRID episode starts:", length(grid_starts$start_indices)))
    #> [1] "GRID episode starts: 99"
    #>
    #> > large_grid <- grid(example_data_hall, gap = 15, threshold = 130)
    #>
    #> > large_starts <- start_finder(large_grid$grid_vector)
    #>
    #> > print(paste("GRID episode starts in larger dataset:",
    #> +     length(large_starts$start_indices)))
    #> [1] "GRID episode starts in larger dataset: 79"

## Transform dataframe

    source(file.path(examples_dir, "transform_df.R"), echo = TRUE, print.eval = TRUE, max.deparse.length = Inf)
    #>
    #> > library(cgmguru)
    #>
    #> > library(iglu)
    #>
    #> > data(example_data_5_subject)
    #>
    #> > data(example_data_hall)
    #>
    #> > threshold <- 130
    #>
    #> > gap <- 60
    #>
    #> > hours <- 2
    #>
    #> > grid_result <- grid(example_data_5_subject, gap = gap,
    #> +     threshold = threshold)
    #>
    #> > mod_grid <- mod_grid(example_data_5_subject, start_finder(grid_result$grid_vector),
    #> +     hours = hours, gap = gap)
    #>
    #> > mod_grid_maxima <- find_max_after_hours(example_data_5_subject,
    #> +     start_finder(mod_grid$mod_grid_vector), hours = hours)
    #>
    #> > local_maxima <- find_local_maxima(example_data_5_subject)
    #>
    #> > final_maxima <- find_new_maxima(example_data_5_subject,
    #> +     mod_grid_maxima$max_indices, local_maxima$local_maxima_vector)
    #>
    #> > transform_maxima <- transform_df(grid_result$episode_start,
    #> +     final_maxima)
    #>
    #> > final_between_maxima <- detect_between_maxima(example_data_5_subject,
    #> +     transform_maxima)
    #>
    #> > hall_threshold <- 130
    #>
    #> > hall_gap <- 60
    #>
    #> > hall_hours <- 2
    #>
    #> > hall_grid_result <- grid(example_data_hall, gap = hall_gap,
    #> +     threshold = hall_threshold)
    #>
    #> > hall_mod_grid <- mod_grid(example_data_hall, start_finder(hall_grid_result$grid_vector),
    #> +     hours = hall_hours, gap = hall_gap)
    #>
    #> > hall_mod_grid_maxima <- find_max_after_hours(example_data_hall,
    #> +     start_finder(hall_mod_grid$mod_grid_vector), hours = hall_hours)
    #>
    #> > hall_local_maxima <- find_local_maxima(example_data_hall)
    #>
    #> > hall_final_maxima <- find_new_maxima(example_data_hall,
    #> +     hall_mod_grid_maxima$max_indices, hall_local_maxima$local_maxima_vector)
    #>
    #> > hall_transform_maxima <- transform_df(hall_grid_result$episode_start,
    #> +     hall_final_maxima)
    #>
    #> > hall_final_between_maxima <- detect_between_maxima(example_data_hall,
    #> +     hall_transform_maxima)

## Function reference and help

For detailed function documentation with additional runnable `@examples`, see the package reference:

    help(package = "cgmguru")

You can also open the package vignettes index:

    browseVignettes("cgmguru")