Skip to content
Snippets Groups Projects
gt-tables.Rmd 19.41 KiB
output: 
  html_document:
      toc: true
      toc_float:
        toc_collapsed: true
        smooth_scroll: true
      widescreen: true
      highlight: pygments
      theme: readable
      css: ./styles/style.css
      df_print: paged
      mathjax: default
      self_contained: false
      incremental: false #True  dann jedes Bullet einzeln
      collapse: true # means the text output will be merged into the R source code block
      includes:
        after_body: ./styles/footer.html
        before_body: ./styles/header.html
knitr::opts_chunk$set(echo = TRUE)

uni <- readRDS("../datasets/uni.rds")
library("viridis")
library("foreign")
library("psych")
library("Hmisc")
library("car")
library("DescTools")
library("ggpubr")
library("ggExtra")
library("readstata13")
library("summarytools")
library("gmodels")
library("corrplot")
library("gt")
library("extrafont")
library("tidyverse")
loadfonts(quiet = TRUE)
library("knitr")
opts_chunk$set(fig.path = 'pics/s6-', # path for calculated figures
               fig.align = 'center',  # alignment of figure (also possible right, left, default)
               fig.show = 'hold', # how to show figures: hold -> direct at the end of code chunk; animate: all plots in an animation
               fig.width = 3,   # figure width
               fig.height = 4,  # figure height
               echo = TRUE,     # Code is printed
               eval = FALSE,    # Code is NOT evaluated
               warning = FALSE, # warnings are NOT displayed
               message = FALSE, # messages are NOT displayed
               size = "tiny",  # latex-size of code chunks
               background = "#E7E7E7", # background color of code chunks
               comment = "", # no hashtags before output
               options(width = 80),
               results = "markdown",
               rows.print = 15
)

example <- table(uni$study, 
                 uni$city)

htmltools::tagList(
  xaringanExtra::use_clipboard(
    button_text = "<i class=\"fa fa-clipboard\"></i>",
    success_text = "<i class=\"fa fa-check\" style=\"color: #90BE6D\"></i>",
    error_text = "<i class=\"fa fa-times-circle\" style=\"color: #F94144\"></i>"
  ),
  rmarkdown::html_dependency_font_awesome()
)

Tabellen publizierbar erstellen mit gt

Das package gt inkludiert hilfreiche Funktionen, um Tabellen aus R in ein Format zu exportieren, das in wissenschaftlichen Arbeiten oder bei Präsentationen genutzt werden kann.

Das Paket ist umfassend und hier werden nur einführende Schritte dargestellt, die aber für erste Projekte im BA-Studium hilfreich sind. Die genaue Dokumentation findet sich in der Benutzerdokumentation.

Die generelle Funktionslogik erfolgt bei gt wie folgt:

Aufbau-Logik eines tables in gt

All diese verschiedenen Felder können einzeln angesprochen werden und verändert werden.

Bevor wir nun mit den Beispielen starten, müssen wir das package selbst laden als auch tidyverse.

# falls noch nicht installiert
# install.packages("gt", 
#                 dependencies = TRUE)
# install.packages("tidyverse",
#                  dependencies = TRUE)

library("gt")
library("tidyverse")

Eine einfache Tabelle

Bevor wir nun Kreuztabellen darstellen, machen wir eine einfache Tabelle. Wir wollen zum Beispiel die Häufigkeiten für die Studienmotivation ausgeben lassen (mot).

table(uni$mot)

Zuerst müssen wir mit tidyverse ein tibble schaffen, dass wir an gt übergeben können. Dazu wählen wir aus dem Datensatz die Variable mot aus, gruppieren die Daten nach mot und bilden dann mit summarize die jeweilige Summe unter den Ausprägungen der Variable mot (Funktion n()). Mit gt() erstellen wir dann die Tabelle:

uni %>% 
  select(mot) %>%  
  group_by(mot) %>% 
  summarise(n = n()) %>% 
  gt()

Jetzt ist das Format noch etwas unhandlich für Berichte oder Abschlussarbeiten und daher nutzen wir eine weitere Funktion aus tidyverse, nämlich pivot_wider(). Mit pivot_wider() können wir die Tabelle neu ordnen. Hierbei geben wir dann an, dass die Spaltennamen die Ausprägungen von mot sind und die Werte (also der Inhalt der ersten und einzigen Zeile) aus der vorherigen Spalte n entnommen werden.

uni %>% 
  select(mot) %>%  
  group_by(mot) %>% 
  summarise(n = n()) %>% 
  pivot_wider(names_from = mot,
              values_from = n) %>% 
  gt()

Fertig ist die Darstellung der absoluten Häufigkeiten der Variable mot. Dies sieht schon viel schöner aus als in der R Konsole (und ist auch als Bild exportierbar, dazu später mehr). Bevor nun einzelne Formatierungsmöglichkeiten in gt gezeigt werden, gehen wir über zu Kreuztabellen und zur Ausgabe prozentualer Häufigkeiten.

Kreuztabelle

Wir nehmen wieder ein Beispiel aus dem Trainingsdatensatz uni. Wir möchten eine Kreuztabelle zwischen Studienort (city) und Studienfach (study) erstellen. Wir möchten wissen, wie viele Personen jeweils in den einzelnen Städten die spezifischen Fächer studieren.