---
title: "Combining Cohorts"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{a08_combine_cohorts}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
NOT_CRAN <- identical(tolower(Sys.getenv("NOT_CRAN")), "true")

knitr::opts_chunk$set(
  collapse = TRUE, 
  warning = FALSE, 
  message = FALSE,
  comment = "#>",
  eval = NOT_CRAN
)
```

```{r setup}
library(omock)
library(CohortConstructor)
library(CohortCharacteristics)
library(ggplot2)
```

For this example we'll use the Eunomia synthetic data from the [omock](https://ohdsi.github.io/omock/) package.

```{r}
cdm <- mockCdmFromDataset(datasetName = "GiBleed", source = "duckdb")
```

Let's start by creating two drug cohorts, one for users of diclofenac and another for users of acetaminophen.

```{r}
cdm$medications <- conceptCohort(cdm = cdm, 
                                 conceptSet = list("diclofenac" = 1124300,
                                                   "acetaminophen" = 1127433), 
                                 name = "medications")
cohortCount(cdm$medications)
```

To check whether there is an overlap between records in both cohorts using the function `intersectCohorts()`.  

```{r}
cdm$medintersect <- intersectCohorts(
  cohort = cdm$medications,
  name = "medintersect"
)

cohortCount(cdm$medintersect)
```
There are 6 individuals who had overlapping records in the diclofenac and acetaminophen cohorts.

```{r, include=FALSE, warning=FALSE}
cdm <- mockCdmFromDataset(datasetName = "GiBleed", source = "duckdb")

cdm$medications <- conceptCohort(cdm = cdm, 
                                 conceptSet = list("diclofenac" = 1124300,
                                                   "acetaminophen" = 1127433), 
                                 name = "medications")
```

We can choose the number of days between cohort entries using the `gap` argument.

```{r}
cdm$medintersect <- intersectCohorts(
  cohort = cdm$medications,
  gap = 365,
  name = "medintersect"
)

cohortCount(cdm$medintersect)
```
There are 94 individuals who had overlapping records (within 365 days) in the diclofenac and acetaminophen cohorts.

We can also combine different cohorts using the function `unionCohorts()`.

```{r}
cdm$medunion <- unionCohorts(
  cohort = cdm$medications,
  name = "medunion"
)

cohortCount(cdm$medunion)
```
We have now created a new cohort which includes individuals in either the diclofenac cohort or the acetaminophen cohort. 

```{r, include=FALSE, warning=FALSE}
cdm <- mockCdmFromDataset(datasetName = "GiBleed", source = "duckdb")

cdm$medications <- conceptCohort(cdm = cdm, 
                                 conceptSet = list("diclofenac" = 1124300,
                                                   "acetaminophen" = 1127433), 
                                 name = "medications")
```

You can keep the original cohorts in the new table if you use the argument `keepOriginalCohorts = TRUE`.
```{r}
cdm$medunion <- unionCohorts(
  cohort = cdm$medications,
  name = "medunion",
  keepOriginalCohorts = TRUE
)

cohortCount(cdm$medunion)
```

You can also choose the number of days between two subsequent cohort entries to be merged using the `gap` argument.

```{r, include=FALSE, warning=FALSE}
cdm <- mockCdmFromDataset(datasetName = "GiBleed", source = "duckdb")

cdm$medications <- conceptCohort(cdm = cdm, 
                                 conceptSet = list("diclofenac" = 1124300,
                                                   "acetaminophen" = 1127433), 
                                 name = "medications")
```

```{r}
cdm$medunion <- unionCohorts(
  cohort = cdm$medications,
  name = "medunion",
  gap = 365,
  keepOriginalCohorts = TRUE
)

cohortCount(cdm$medunion)
```
