---
title: "REDCapDM - Data reading and processing"
output:
  rmarkdown::html_vignette:
    toc: true
    toc_depth: 5
    number_sections: true
vignette: >
  %\VignetteIndexEntry{REDCapDM - Data reading and processing}
  %\VignetteEncoding{UTF-8}
  %\VignetteEngine{knitr::rmarkdown}
editor_options: 
  chunk_output_type: inline
---
```{r message=FALSE, warning=FALSE, include=FALSE}
rm(list = ls())
library(REDCapDM) 
library(kableExtra)
library(knitr)
library(dplyr)
library(magrittr)
library(purrr)
```
This vignette provides a summary of the straightforward and common use of [REDCapDM](https://github.com/bruigtp/REDCapDM) to interact with [REDCap](https://www.project-redcap.org/) data.
# **Read data**
To import data from [REDCap](https://www.project-redcap.org/), you can use the [`redcap_data()`](https://bruigtp.github.io/REDCapDM/reference/redcap_data.html) function, which provides two primary methods: importing data from local files or establishing an API connection.
## **Local files**
Before starting, ensure you have the required R and CSV files exported from [REDCap](https://www.project-redcap.org/), including the instrument-event mappings file. All these files should be in the same directory for the package to work correctly.
Use the `data_path` and `dic_path` arguments to indicate the paths to your R data file and [REDCap](https://www.project-redcap.org/) project's dictionary file, respectively. If your [REDCap](https://www.project-redcap.org/) project is longitudinal, you'll additionally need to supply the event-form mapping file using the `event_path` argument.
```{r message=FALSE, warning=FALSE, comment=NA, eval=FALSE}
dataset <- redcap_data(data_path = "C:/Users/username/example.r",
                       dic_path = "C:/Users/username/example_dictionary.csv",
                       event_path = "C:/Users/username/events.csv")
```
## **API connection**
If you opt for an API connection, you can provide the `uri` (uniform resource identifier) and `token` (user-specific password) for your [REDCap](https://www.project-redcap.org/) project. This method will automatically retrieve the event-form mapping if your project is longitudinal.
Use both arguments to set up the API connection and import the data:
```{r eval=FALSE, message=FALSE, warning=FALSE, comment=NA}
dataset_api <- redcap_data(uri = "https://redcap.idibell.cat/api/",
                           token = "55E5C3D1E83213ADA2182A4BFDEA")
```
## **Output**
The [`redcap_data()`](https://bruigtp.github.io/REDCapDM/reference/redcap_data.html) function returns a list with three elements:
-   Imported data: Contains the data from your [REDCap](https://www.project-redcap.org/) project
-   Dictionary: Provides information about variables and their associated labels.
-   Event-form mapping (only available for longitudinal projects): Describes the correspondence between events and forms in your project.
# **Process data**
Having successfully imported our data into R, you can now use the [`rd_transform()`](https://bruigtp.github.io/REDCapDM/reference/rd_transform.html) function to start processing the data.
This function performs several transformations:
-   Elimination of selected variables
-   Elimination of variables containing certain patterns such as '_complete' and '_timestamp'
-   Recalculation of [REDCap](https://www.project-redcap.org/) calculated fields
-   Checkbox transformation by changing their names to the names of their options
-   Replacement of the original variables with their factor version
-   Branching logic transformation, converting [REDCap](https://www.project-redcap.org/) logic to R logic.
## **Standard**
The only essential elements that must be supplied are the dataset to be transformed and the corresponding dictionary. In the case of a longitudinal project, it is advisable to also specify the event form dataset to take full advantage of this function. These elements can be directly specified using the output of the [`redcap_data()`](https://bruigtp.github.io/REDCapDM/reference/redcap_data.html) function or separately using distinct arguments:
```{r message=FALSE, warning=FALSE, comment=NA}
#Option A: list object 
covican_transformed <- rd_transform(covican)
#Option B: separately with different arguments
covican_transformed <- rd_transform(data = covican$data, 
                                    dic = covican$dictionary, 
                                    event_form = covican$event_form)
```
This function returns a list containing the transformed dataset, dictionary, event_form and the results of each transformation. To retrieve the results of the transformation, use the following code block:
```{r message=FALSE, warning=FALSE, comment=NA}
#Print the results of the transformation
covican_transformed$results
```
## **By event**
If the [REDCap](https://www.project-redcap.org/) project is longitudinal, you can further adjust the structure of the transformed dataset. For example, it can be split by event:
```{r message=FALSE, warning=FALSE, comment=NA}
dataset <- rd_transform(covican,
                        final_format = "by_event")
```
Where the transformed dataset is a tibble object, containing data frames for each event in the [REDCap](https://www.project-redcap.org/) project.
```{r message=FALSE, warning=FALSE, comment="#>", collapse = TRUE}
dataset$data
```
## **By form**
Or, alternatively, it can be split by form:
```{r message=FALSE, warning=FALSE, comment=NA}
dataset <- rd_transform(covican,
                        final_format = "by_form")
```
Where the tibble object is composed by data frames corresponding to each form in the [REDCap](https://www.project-redcap.org/) project.
```{r message=FALSE, warning=FALSE, comment="#>", collapse = TRUE}
dataset$data
```
**For more information, consult the complete vignette available at: https://bruigtp.github.io/REDCapDM/articles/REDCapDM.html**