---
title: "Exploring Multiple Datasets"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Exploring Multiple Datasets}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

# Working with Multiple Datasets in dataviewR

`dataviewR` allows you to explore **two or more datasets in the same session**, making it easy to compare structures, values, and attributes across data sources.

This capability is especially useful when reviewing: <br>
- raw vs derived datasets  
- ADaM vs SDTM datasets  
- training vs test sets  
- simulation outputs vs expected results  

This article walks through how to launch and work with multiple datasets.

---

## 1. Launching dataviewR with multiple datasets

You can pass any number of datasets to `dataviewer()`:

```r
library(dataviewR)

dataviewer(iris, mtcars)
```

Each dataset will appear in its own tab inside the application in the RStudio Viewer pane or the default web browser.

You can pass more than two datasets as well:

```r
dataviewer(iris, mtcars, ToothGrowth, airquality)
```

## 2. Navigating between dataset tabs

Inside the Viewer pane:

- Each dataset is presented under its own labeled tab
- Switching between tabs does not reset filters or selections
- Each dataset behaves independently (filtering, column selection, metadata)

This makes it easy to compare side-by-side:

- variable names
- attributes (labels and classes)
- missing data patterns
- derived vs raw values

## 3. Applying filters and selections independently

Each dataset tab maintains:

- its own filter expression
- its own column selection
- its own generated code
- its own metadata panel

This allows you to:

- filter iris on species
- filter mtcars on horsepower
- compare the results

Example:

Tab: iris

```ini
Species == "setosa"
```
<p align="center"> <img src="figures/iris_setosa.png" width="85%" alt="dataviewR viewing the iris dataset"> </p>

Tab: mtcars

```nginx
mpg > 20 & cyl == 4
```
<p align="center"> <img src="figures/mtcars_cyl.png" width="85%" alt="dataviewR viewing the iris dataset"> </p>

Each dataset's output, table, and code are kept separate.

## 4. Independent code generation

Click Generate R Code within any dataset tab to get a reproducible pipeline for that dataset.

Example structure:

```r
# Generated R Code
library(dplyr)

iris |>
  filter(Species == "setosa") |>
  select(Sepal.Length, Sepal.Width, Species)
```

Switch tabs → generate code for the other dataset.

## 5. Typical use cases

#### ✓ Raw vs Derived Data
Load both raw and derived datasets:

The dm_raw, dm, and adsl datasets are loaded from the `pharmaverseraw`, `pharmaversesdtm`, and `pharmaverseadam` packages, respectively.

```r
library(pharmaverseraw)
library(pharmaversesdtm)
library(pharmaverseadam)

dataviewer(dm_raw, dm)
dataviewer(dm, adsl)
```

Then:

- Compare variable labels and other attributes
- Confirm derived variables
- Check row/column mismatches

#### ✓ SDTM Dataset Review

```r
library(pharmaversesdtm)

dataviewer(dm, suppdm, ae, suppae)
```


#### ✓ ADaM Dataset Review
```r
library(pharmaverseadam)

dataviewer(adsl, adae, adlb)
```

Navigate through tabs to review structure and metadata.

#### ✓ Comparing train/test sets
```r
dataviewer(train_set, test_set)
```

Inspect variable distributions and missingness.

#### ✓ Reviewing multiple simulation outputs
```r
dataviewer(sim1, sim2, sim3)
```
Check how different simulation runs behave.

## Summary
In this article, you learned how to:

- Launch dataviewR with multiple datasets
- Navigate dataset tabs
- Filter and select columns independently
- Generate code for each dataset
- Parallel viewing of datasets in each tab

**Viewing datasets side-by-side** is one of the most powerful features of dataviewR, especially for data review and quality control workflows.

## Next Article

Continue with: [Working with Clinical Datasets](adam-clinical-dataset.html)
