## ----knitropts, include = FALSE-----------------------------------------------
knitr::opts_chunk$set(message = TRUE, 
                      warning = FALSE,
                      eval = FALSE, 
                      echo = FALSE)

## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Load packages
library(spatsoc)
library(data.table)

## ----echo = FALSE, eval = TRUE------------------------------------------------
data.table::setDTthreads(1)

## ----eval = TRUE, echo = TRUE-------------------------------------------------
# Read in spatsoc's example data
DT <- fread(system.file("extdata", "DT.csv", package = "spatsoc"))

# Use subset of individuals
DT <- DT[ID %in% c('H', 'I', 'J')]

# Cast character column 'datetime' as POSIXct
DT[, datetime := as.POSIXct(datetime, tz = 'UTC')]
DT <- DT[ID %chin% c('H', 'I', 'J')]

## ----eval = TRUE, echo = FALSE------------------------------------------------
knitr::kable(DT[, .SD[1:2], ID][order(ID)])

## ----groupmins, echo = TRUE---------------------------------------------------
# group_times(DT, datetime = 'datetime', threshold = '5 minutes')

## ----tableSetUp, eval = TRUE--------------------------------------------------
nRows <- 9

## ----tabgroupmins, eval = TRUE------------------------------------------------
knitr::kable(
  group_times(DT, threshold = '5 minutes', datetime = 'datetime')[, 
    .(ID, X, Y, datetime, minutes, timegroup)][
      order(datetime)][
        1:nRows])

## ----grouphours, echo = TRUE--------------------------------------------------
# group_times(DT, datetime = 'datetime', threshold = '2 hours')

## ----tabgrouphours, eval = TRUE-----------------------------------------------
knitr::kable(
  group_times(DT, threshold = '2 hours', datetime = 'datetime')[, 
    .(ID, X, Y, datetime, hours, timegroup)][
      order(datetime)][
        1:nRows])

## ----groupdays, echo = TRUE---------------------------------------------------
# group_times(DT, datetime = 'datetime', threshold = '5 days')

## ----tabgroupdays, eval = TRUE------------------------------------------------
knitr::kable(
  group_times(
    DT, 
    threshold = '5 days', 
    datetime = 'datetime')[,
      .SD[sample(.N, 3)], by = .(timegroup, block)][order(datetime)][
        1:nRows, .(ID, X, Y, datetime, block, timegroup)]
)

## ----grouppts, echo = TRUE----------------------------------------------------
# group_times(DT = DT, datetime = 'datetime', threshold = '15 minutes')
# group_pts(DT, threshold = 50, id = 'ID', coords = c('X', 'Y'), timegroup = 'timegroup')

## ----fakegrouppts, eval = TRUE------------------------------------------------
DT <- group_times(DT = DT, datetime = 'datetime', 
                     threshold = '15 minutes')
DT <- group_pts(
    DT = DT,
    threshold = 50, id = 'ID', coords = c('X', 'Y'),
    timegroup = 'timegroup')

knitr::kable(
  DT[
      between(group,  771, 774)][order(timegroup)][
        1:nRows, .(ID, X, Y, timegroup, group)]
)

## ----fakegrouplines, echo = TRUE----------------------------------------------
# utm <- 32736
# 
# group_times(DT = DT, datetime = 'datetime', threshold = '1 day')
# group_lines(DT, threshold = 50, crs = utm,
#             id = 'ID', coords = c('X', 'Y'),
#             timegroup = 'timegroup', sortBy = 'datetime')

## ----grouplines, eval = TRUE--------------------------------------------------
utm <- 32736

DT <- group_times(DT = DT, datetime = 'datetime', 
                threshold = '1 day')
DT <- group_lines(DT,
                  threshold = 50, crs = utm, 
                  id = 'ID', coords = c('X', 'Y'), 
                  sortBy = 'datetime', timegroup = 'timegroup')
knitr::kable(
  unique(DT[, .(ID, timegroup, group)])[, .SD[1:3], ID][order(timegroup)]
)

## ----fakegrouppolys, echo = TRUE----------------------------------------------
# utm <- 32736
# group_times(DT = DT, datetime = 'datetime', threshold = '8 days')
# group_polys(DT = DT, area = TRUE, hrType = 'mcp',
#            hrParams = list('percent' = 95),
#            crs = utm,
#            coords = c('X', 'Y'), id = 'ID')

## ----grouppolys, eval = TRUE--------------------------------------------------
utm <- 32736
DT <- group_times(DT = DT, datetime = 'datetime', threshold = '8 days')
knitr::kable(
  data.frame(group_polys(
    DT, 
    area = TRUE, hrType = 'mcp',
           hrParams = list('percent' = 95),
           crs = utm,
           coords = c('X', 'Y'), id = 'ID')[
             , .(ID1, ID2, area, proportion)])
)

## ----edgedist, echo = TRUE----------------------------------------------------
# group_times(DT = DT, datetime = 'datetime', threshold = '15 minutes')
# edge_dist(DT, threshold = 50, id = 'ID',
#           coords = c('X', 'Y'), timegroup = 'timegroup', fillNA = TRUE)

## ----fakeedgedist, eval = TRUE------------------------------------------------
DT <- group_times(DT = DT, datetime = 'datetime', 
                     threshold = '15 minutes')
edges <- edge_dist(DT, threshold = 50, id = 'ID', 
                   coords = c('X', 'Y'), timegroup = 'timegroup', fillNA = TRUE)

knitr::kable(
  edges[between(timegroup, 158, 160)]
)

## ----edgenn, echo = TRUE------------------------------------------------------
# group_times(DT = DT, datetime = 'datetime', threshold = '15 minutes')
# edge_nn(DT, id = 'ID', coords = c('X', 'Y'), timegroup = 'timegroup')

## ----fakeedgenn, eval = TRUE--------------------------------------------------
DT <- group_times(DT = DT, datetime = 'datetime', 
                     threshold = '15 minutes')
edges <- edge_nn(DT, id = 'ID', coords = c('X', 'Y'), timegroup = 'timegroup')

knitr::kable(
  edges[1:6]
)

