---
title: "Table: A Step-by-Step Guide"
author: "Pattawee Puangchit"
date: "`r Sys.Date()`"
output:
html_document:
toc: true
toc_float:
collapsed: true
smooth_scroll: true
css: mystyle.css
number_sections: true
code_folding: show
self_contained: false
vignette: >
%\VignetteIndexEntry{Table: A Step-by-Step Guide}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE, eval = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
warning = FALSE,
message = FALSE,
eval = requireNamespace("GTAPViz", quietly = TRUE)
)
```
```{r Dev Period, include = FALSE, eval = TRUE}
devtools::load_all()
try(devtools::load_all(".."), silent = TRUE) # go up one level from /vignettes/
input_path <- system.file("extdata/in", package = "GTAPViz")
sl4.plot.data <- readRDS(file.path(input_path, "sl4.plot.data.rds"))
har.plot.data <- readRDS(file.path(input_path, "har.plot.data.rds"))
macro.data <- readRDS(file.path(input_path, "macro.data.rds"))
```
This vignette illustrates how to set up table configurations and generate outputs.
For a complete list of available tables with sample images, see the [table catalog](https://pattawee.shinyapps.io/gtapviz-advanced-table-configs/).
# Structured Table
This is an example of how to create a structured pivot table suitable for inclusion in academic presentations.
Important:
The `report_table` function requires **a data list**—not a data frame.
- This list structure matches the format of `sl4.plot.data` or `har.plot.data`, without delisting individual elements.
- This differs from the plotting functions, which use a **data frame** as input.
- Multiple tables can be generated in a single setup using a data list.
For example, you can generate report tables for **all data frames within `sl4.plot.data`** in one code block.
```{r Comparison Table, eval = FALSE}
report_table(
data_list = sl4.plot.data,
pivot_col = list(REG = "Variable",
'COMM*REG' = "Commodity"),
group_by = list(
REG = c("Experiment", "Region"),
'COMM*REG' = c("Experiment", "Region")),
rename_cols = list("Experiment" = "Scenario"),
total_column = FALSE,
decimal = 4,
subtotal_level = FALSE,
repeat_label = FALSE,
include_units = TRUE,
var_name_by_description = TRUE,
add_var_info = TRUE,
add_group_line = FALSE,
separate_sheet_by = "Unit",
export_table = FALSE,
output_path = NULL,
separate_file = FALSE,
workbook_name = "Comparison Table"
)
```
đź’ˇ Tip
`var_name_by_description` replaces variable names with their full descriptions to enhance clarity and give the output a more academic appearance.
# Decomposition Table {#sec:decomp-table}
The same `report_table` function can be used to generate decomposition tables, including a total column, as shown in the example below:
```{r Decomposition Table, eval = FALSE}
report_table(
data_list = har.plot.data,
pivot_col = list(A = "COLUMN",
E1 = "PRICES"),
group_by = list(
A = list("Experiment", "Region"),
E1 = list("Experiment", "Commodity", "PRICES")
),
rename_cols = list("Experiment" = "Scenario"),
total_column = TRUE,
decimal = 6,
subtotal_level = FALSE,
repeat_label = FALSE,
include_units = TRUE,
var_name_by_description = FALSE,
add_var_info = FALSE,
add_group_line = FALSE,
separate_sheet_by = "Region",
export_table = FALSE,
output_path = NULL,
separate_file = FALSE,
workbook_name = "Decomposition Table"
)
```
# Interactive Pivot Tables {#sec:pivot-table}
Unlike static tables generated by `report_table()`, pivot tables remain fully interactive in the Excel output. However, they work with **a single data frame** at a time (just like the plotting functions).
This function offers:
- **Comprehensive Filtering**
Add multiple filtering dimensions to enhance flexibility and enable users to explore the data from different perspectives.
- **Retention of Raw Data**
The raw dataset is included in the Excel file, allowing downstream users—especially in Excel—to reconstruct or customize pivot tables as needed.
- **User-Oriented Design**
Ideal for sharing with non-R users, the output is organized for intuitive exploration and ease of use.
```{r Pivot Table with Filter, eval=FALSE}
pivot_table_with_filter(
data = sl4.plot.data[["COMM*REG"]],
filter = c("Variable", "Unit"), # Allow filtering by variable type and unit
rows = c("Region", "Commodity"), # Regions and sectors as row fields
cols = c("Experiment"), # Experiments as column fields
data_fields = "Value", # Values to be aggregated
raw_sheet_name = "Raw_Data", # Sheet name for raw data
pivot_sheet_name = "Sector_Pivot", # Sheet name for pivot table
export_table = FALSE,
output_path = NULL,
workbook_name = "Sectoral_Impact_Analysis.xlsx"
)
```
# Sample Data
Sample data used in this vignette is obtained from the GTAPv7 model
and utilizes data from the GTAP 11 database. For
more details, refer to the [GTAP Database Archive](https://www.gtap.agecon.purdue.edu/databases/archives.asp).
```{=html}
```