tests/fct-FCTS/dates_index.R

library(data.table)
library(lubridate)


# Datasets d'analyse ------------------------------------------------------------------------------

data_admis <- data.table(
  ID = c(1, 1, 2, 3, 4, 5),
  DateNais = c(-100, -100, -98, -97, -96, 201),
  DateDeces = c(NA, NA, NA, NA, 170, NA),
  DebutAdmis = c(1, 21, 47, 90, 150, 201),
  FinAdmis = c(10, 30, 60, 130, 170, 260)
)
data_admis[, `:=` (ID = as.integer(ID),
                   DateNais = as_date(DateNais) + 15000,
                   DateDeces = as_date(DateDeces) + 15000,
                   DebutAdmis = as_date(DebutAdmis) + 15000,
                   FinAdmis = as_date(FinAdmis) + 15000)]

data_index <- data.table(
  ID = c(1, 2, 3, 4, 5),
  DebutIndex = c(1, 41, 101, 161, 195),
  FinIndex = c(10, 50, 110, 180, 300)
)
data_index[, `:=` (ID = as.integer(ID),
                   DebutIndex = as_date(DebutIndex) + 15000,
                   FinIndex = as_date(FinIndex) + 15000)]


# Manipulations -----------------------------------------------------------------------------------

dt <- merge(  # Joindre les admis au dataset index
  data_admis, data_index,
  by = "ID",
  all.y = TRUE  # conserver toutes les valeurs de index
)
dt <- dt[FinAdmis >= DebutIndex & DebutAdmis <= FinIndex]  # conserver les admis qui chevauchent index
dt[DebutAdmis < DebutIndex, DebutAdmis := DebutIndex]  # ajuster les dates Admis pour les inclure dans l'intervalle index
dt[FinAdmis > FinIndex, FinAdmis := FinIndex]
dt[, `:=` (nJours_index = as.integer(FinIndex - DebutIndex + 1L),  # indiquer le nombre de jour pour index et admis
           nJours_admis = as.integer(FinAdmis - DebutAdmis + 1L))]
dt[, ratio := nJours_admis / nJours_index]  # ratio indiquant le nombre de jours admissible dans index
dt[, estNe := FALSE][DebutIndex <= DateNais & DateNais <= FinIndex, estNe := TRUE]
dt[, estDCD := FALSE][DebutIndex <= DateDeces & DateDeces <= FinIndex, estDCD := TRUE]
INESSS-QC/admissibilite1 documentation built on Aug. 7, 2020, 9:39 a.m.