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