inst/doc/deck-cookbook.R

## ----setup, include=FALSE---------------------------------------------------------------------------------------------
knitr::opts_chunk$set(eval = FALSE)

## ---------------------------------------------------------------------------------------------------------------------
#  suppressPackageStartupMessages({
#      library(purrr)
#      library(crunch)
#  })
#  
#  options("crunch.show.progress" = FALSE)
#  
#  ds <- newExampleDataset()

## ---------------------------------------------------------------------------------------------------------------------
#  deck <- newDeck(ds, "Q3 Pets Deck", is_public = TRUE)
#  private_deck <- newDeck(ds, "Private Deck")
#  
#  # If no `vizType` is specified, defaults to a table
#  slide <- newSlide(deck, ~q1, title = "Table of Favorite Pet")
#  
#  # Example of setting a vizType and filter
#  slide <- newSlide(
#      deck,
#      mean(ndogs) ~ country,
#      title = "Dot Plot of Mean Dogs by Country",
#      display_settings = list(vizType = "dotplot"),
#      filter = ds$q1 == "Dog"
#  )
#  
#  deck <- refresh(deck)

## ---------------------------------------------------------------------------------------------------------------------
#  ds <- refresh(ds)
#  decks(ds)
#  
#  private_deck <- decks(ds)[["Private Deck"]]
#  
#  slide <- newSlide(
#      private_deck,
#      ~q1,
#      title = "Bar Plot of Favorite Pet",
#      display_settings = list(vizType = "groupedBarPlot")
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newMarkdownSlide(deck, "This survey included **10,000 participants**!", title = "About")

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newMarkdownSlide(
#    deck,
#    "This survey was collected by ACME surveys",
#    markdownSlideImage("acme-logo.png"),
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  # Move title to subtitle and change the title
#  slide <- slides(deck)[["Table of Favorite Pet"]]
#  subtitle(slide) <- title(slide)
#  title(slide) <- "Cats are the most popular"
#  
#  
#  # Rename a category
#  slide <- slides(deck)[[2]]
#  transforms(slide) <- list(
#      rows_dimension = makeDimTransform(rename = c("AUS" = "Australia"))
#  )
#  
#  
#  # Edit a markdown slide
#  slide <- slides(deck)[[3]]
#  slideMarkdown(slide) <- "**Replacement text**"

## ---- include=FALSE---------------------------------------------------------------------------------------------------
#  ### Reordering slides on a deck
#  #### Problem
#  # You want to rearrange the order slides on an existing deck.
#  
#  #### Solution
#  # TODO: This is not currently possible from R :(
#  # (Note this controls the order of the slides in a deck, which controls how they appear in the web app's
#  # deck viewer and Excel and PowerPoint exports, but does not change order or position of an existing
#  # Crunch Dashboard)

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- slides(deck)[[1]]
#  
#  if (FALSE) { # Not actually run for example
#      delete(slide)
#  }

## ---------------------------------------------------------------------------------------------------------------------
#  is.public(private_deck) <- TRUE # now public

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newSlide(
#      deck,
#      ~q1,
#      title = "Univariate frequency: Favorite Pet"
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newSlide(
#      deck,
#      ~q1 + country,
#      title = "Bivariate frequency: Favorite Pet by country"
#  )
#  
#  # A third dimension is possible, which will usually result in a tabbed result:
#  slide <- newSlide(
#      deck,
#      ~q1 + country + wave,
#      title = "Trivariate frequency: Favorite Pet by country by wave"
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newSlide(
#      deck,
#      ~allpets,
#      title = "Categorical array: default order"
#  )
#  
#  slide <- newSlide(
#      deck,
#      ~categories(allpets) + subvariables(allpets),
#      title = "Categorical array: categories on rows dimension"
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newSlide(
#      deck,
#      mean(ndogs) ~ 1,
#      title = "Mean Number of Dogs"
#  )
#  
#  slide <- newSlide(
#      deck,
#      mean(ndogs) ~ country,
#      title = "Mean Number of Dogs by Country"
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  # There's only one MR available on this dataset, so we repeat the same one twice to illustrate
#  slide <- newSlide(
#      deck,
#      ~scorecard(allpets, allpets),
#      title = "Scorecard"
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newSlide(
#      deck,
#      ~q1,
#      title = "Favorite pet using default palette",
#      display_settings = list(vizType = "groupedBarPlot"),
#      transform = list(
#          rows_dimension = makeDimTransform(colors = defaultPalette(ds))
#      )
#  )
#  
#  graph_pal <- palettes(ds)[["purple palette"]]
#  slide <- newSlide(
#      deck,
#      ~categories(petloc) + subvariables(petloc),
#      title = "Pets by location using another palette",
#      display_settings = list(vizType = "horizontalBarPlot"),
#      transform = list(
#          rows_dimension = makeDimTransform(colors = graph_pal)
#      )
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newSlide(
#      deck,
#      ~q1,
#      title = "Favorite pet using colors from R",
#      display_settings = list(vizType = "groupedBarPlot"),
#      transform = list(
#          rows_dimension = makeDimTransform(colors = c("#af8dc3", "#f7f7f7", "#7fbf7b"))
#      )
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newSlide(
#      deck,
#      ~q1,
#      title = "Favorite pet excluding birds",
#      display_settings = list(vizType = "groupedBarPlot"),
#      transform = list(
#          rows_dimension = makeDimTransform(hide = "Bird")
#      )
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  slide <- newSlide(
#      deck,
#      ~q1 + country,
#      title = "Favorite pet by country horizontal bar plot",
#      display_settings = list(vizType = "horizontalBarPlot")
#  )
#  
#  
#  slide <- newSlide(
#      deck,
#      ~q1 + wave,
#      title = "Favorite pet over time timeplot",
#      display_settings = list(vizType = "timeplot")
#  )

## ---------------------------------------------------------------------------------------------------------------------
#  template_deck <- newDeck(ds, "Templates", is_public = TRUE)
#  slide <- newSlide(
#      template_deck,
#      ~q1,
#      title = "Donut with value labels",
#      display_settings = list(vizType = "donut", showValueLabels = TRUE),
#      viz_specs = list(
#          default = list(
#              format = list(
#                  decimal_places = list(percentages = 0L, other = 2L),
#                  show_empty = FALSE
#              )
#          )
#      )
#  )
#  
#  # Setting the slide `display_setting` and `viz_specs` directly:
#  slide <- newSlide(
#      deck,
#      ~country,
#      title = "Country donut with value labels",
#      display_settings = displaySettings(template_deck[["Donut with value labels"]]),
#      viz_specs = vizSpecs(template_deck[["Donut with value labels"]])
#  )
#  
#  # How to print out the structure in a format that can be copy and pasted into your code
#  print(dput(displaySettings(template_deck[["Donut with value labels"]])))

## ---------------------------------------------------------------------------------------------------------------------
#  deck <- newDeck(ds, "Full Dataset Topline Deck", is_public = TRUE)
#  
#  var_aliases <- aliases(variables(ds))
#  
#  slides <- lapply(var_aliases, function(alias) {
#      slide_query <- as.formula(paste0("~", alias))
#      slide_title <- paste0("Topline - ", name(ds[[alias]]))
#  
#      newSlide(deck, slide_query, title = slide_title)
#  })

## ---------------------------------------------------------------------------------------------------------------------
#  deck <- newDeck(ds, "Folder Topline Deck", is_public = TRUE)
#  
#  folder <- cd(ds, "Key Pet Indicators")
#  var_aliases <- aliases(variables(folder))
#  
#  slides <- lapply(var_aliases, function(alias) {
#      slide_query <- as.formula(paste0("~", alias))
#      slide_title <- paste0("Topline - ", name(ds[[alias]]))
#  
#      newSlide(deck, slide_query, title = slide_title)
#  })

## ---------------------------------------------------------------------------------------------------------------------
#  deck <- newDeck(ds, "Crosstabs Deck", is_public = TRUE)
#  
#  demo_vars <- aliases(variables(cd(ds, "Dimensions")))
#  var_aliases <- setdiff(aliases(variables(ds)), demo_vars) # don't cross demo vars with themselves
#  
#  slides <- lapply(var_aliases, function(alias) {
#      # Add a slide before crosstabs of the univariate frequency
#      all_query <- as.formula(paste0("~", alias))
#      all_title <- paste0("Frequency - ", name(ds[[alias]]))
#  
#      newSlide(deck, all_query, title = all_title)
#  
#      lapply(demo_vars, function(demo_alias) {
#          crosstab_query <- as.formula(paste0("~", demo_alias, " + ", alias))
#          crosstab_title <- paste0("Crosstab - ", name(ds[[alias]]), " by ", name(ds[[demo_alias]]))
#  
#          newSlide(deck, crosstab_query, title = crosstab_title)
#      })
#  })

## ---------------------------------------------------------------------------------------------------------------------
#  cat_slide <- function(alias, ds, deck) {
#      slide_query <- as.formula(paste0("~", alias))
#      slide_title <- paste0(name(ds[[alias]]))
#      newSlide(
#          deck,
#          slide_query,
#          title = slide_title,
#          display_settings = list(vizType = "donut")
#      )
#  }
#  
#  mr_slide <- function(alias, ds, deck) {
#      slide_query <- as.formula(paste0("~", alias))
#      slide_title <- paste0(name(ds[[alias]]))
#      newSlide(
#          deck,
#          slide_query,
#          title = slide_title,
#          display_settings = list(vizType = "groupedBarPlot")
#      )
#  }
#  
#  numeric_slide <- function(alias, ds, deck) {
#      slide_query <- as.formula(paste0("mean(", alias, ") ~ wave"))
#      slide_title <- paste0(name(ds[[alias]]), " over time")
#      newSlide(
#          deck,
#          slide_query,
#          title = slide_title,
#          display_settings = list(vizType = "timeplot")
#      )
#  }
#  
#  deck <- newDeck(ds, "Slides Customized by Variable Type", is_public = TRUE)
#  
#  var_aliases <- c("q1", "allpets", "ndogs")
#  slides <- lapply(var_aliases, function(alias) {
#      switch(
#          type(ds[[alias]]),
#          "categorical" = cat_slide(alias, ds, deck),
#          "multiple_response" = mr_slide(alias, ds, deck),
#          "numeric" = numeric_slide(alias, ds, deck),
#      )
#  })

Try the crunch package in your browser

Any scripts or data that you put into this service are public.

crunch documentation built on Aug. 31, 2023, 1:07 a.m.