--- 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) ```