In diesem Kapitel werden Daten aus der Right Heart Catetherization (RHC) verwendet, um Funktionen zur Tabellierung von Daten zu demonstrieren. Sie können die Daten mit folgendem Befehl herunterladen:
rhc <- read.csv("https://hbiostat.org/data/repo/rhc.csv", header = TRUE)Funktionen in Base R
Base R ist die Grundinstallation ohne zusätzliche Packages. Die am häufigsten verwendete Funktion für Tabellen in Base R ist table().
Eine einzelne kategoriale Variable lässt sich mit der Funktion table() tabellieren:
table(rhc$sex)Female Male
2543 3192Eine Kreuztabelle wird folgendermaßen erstellt:
table(rhc$sex, rhc$death) No Yes
Female 919 1624
Male 1094 2098Beachten Sie, dass das erste Argument (sex) die Zeilen und das zweite Argument (death) die Spalten der Kreuztabelle bildet.
Wir können eine Kreuztabelle nach einer dritten Variablen stratifizieren. Um die vorherige Tabelle nach der Variablen ca (Krebs) zu stratifizieren, schreiben wir Folgendes:
table(rhc$sex, rhc$death, rhc$ca)ca = Metastatic
No Yes
Female 24 175
Male 12 173
ca = No
No Yes
Female 798 1151
Male 960 1470
ca = Yes
No Yes
Female 97 298
Male 122 455Tabellierung mit Zusatzpaketen
Die Packages janitor, dplyr, gtsummary, crosstable und rstatix enthalten leistungsfähige Funktionen zur Erstellung deskriptiver Tabellen. Installieren Sie die Packages mit folgendem Befehl:
install.packages(c("rstatix", "janitor", "gtsummary", "crosstable"))Rstatix
Mit der Funktion get_summary_stats() erzeugen wir deskriptive Kennzahlen für ausgewählte Variablen. Im folgenden Beispiel wählen wir die Variablen age, aps1, urin1, adld3p, paco21 und ph1:
library(rstatix)
rhc %>%
get_summary_stats(
age, aps1, urin1, adld3p, paco21, ph1,
type = "full")## A tibble: 6 × 13
variable n min max median q1 q3 iqr mad mean sd se ci
adld3p 1439 0 7 0 0 2 2 0 1.18 1.82 0.048 0.094
age 5735 18.0 102. 64.0 50.1 73.9 23.8 17.0 61.4 16.7 0.22 0.432
aps1 5735 3 147 54 41 67 26 19.3 54.7 20.0 0.264 0.517
paco21 5735 1 156 37 31 42 11 8.90 38.7 13.2 0.174 0.341
ph1 5735 6.58 7.77 7.4 7.34 7.46 0.12 0.089 7.39 0.11 0.001 0.003
urin1 2707 0 9000 1927 1110 2955 1845 1357. 2192. 1525. 29.3 57.5Das Argument type wurde oben als type="full" angegeben, was die obigen Parameter ergibt. Das Argument hat folgende Optionen: "full", "common", "robust", "five_number", "mean_sd", "mean_se", "mean_ci", "median_iqr", "median_mad", "quantile", "mean", "median", "min", "max".
Janitor
Mit janitor lassen sich flexible Tabellen erstellen. Wir beginnen mit einer Beschreibung der Variablen cat1 (Krankheitskategorie):
library(janitor)
rhc %>% tabyl(cat1, show_na = T) cat1 n percent
ARF 2490 0.434176112
CHF 456 0.079511770
Cirrhosis 224 0.039058413
Colon Cancer 7 0.001220575
Coma 436 0.076024412
COPD 457 0.079686138
Lung Cancer 39 0.006800349
MOSF w/Malignancy 399 0.069572799
MOSF w/Sepsis 1227 0.213949433Anschließend fügen wir die Variable sex hinzu, wodurch eine Kreuztabelle entsteht:
rhc %>% tabyl(cat1, sex, show_na = T) cat1 Female Male
ARF 1108 1382
CHF 143 313
Cirrhosis 81 143
Colon Cancer 5 2
Coma 230 206
COPD 208 249
Lung Cancer 12 27
MOSF w/Malignancy 190 209
MOSF w/Sepsis 566 661Mit den „adorn“-Funktionen von janitor können wir den Tabellen zusätzliche Informationen hinzufügen. Adorn-Funktionen lassen sich kombinieren. Es handelt sich um folgende:
| Name der Funktion | Funktion |
|---|---|
adorn_totals() |
Fügt eine Summe hinzu. Hat das Argument where =, das “row”, “col” oder “both” sein kann. |
adorn_percentages() |
Wandelt Anzahlen in Anteile um. Hat das Argument denominator = “row”, “col” oder “all”. |
adorn_pct_formatting() |
Wandelt Anteile in Prozent um. |
adorn_rounding() |
Rundet die Dezimalstellen von Anteilen. |
adorn_ns() |
Fügt einer Tabelle mit Anteilen oder Prozentangaben die Anzahlen hinzu. |
adorn_title() |
Fügt den Zeilen und Spalten der Kreuztabelle eine Überschrift hinzu. |
Wir erstellen eine Kreuztabelle mit Prozentangaben:
rhc %>%
tabyl(cat1, sex, show_na = T) %>%
adorn_totals(where="col") %>%
adorn_totals(where="row") %>%
adorn_percentages() %>%
adorn_pct_formatting() cat1 Female Male Total
ARF 44.5% 55.5% 100.0%
CHF 31.4% 68.6% 100.0%
Cirrhosis 36.2% 63.8% 100.0%
Colon Cancer 71.4% 28.6% 100.0%
Coma 52.8% 47.2% 100.0%
COPD 45.5% 54.5% 100.0%
Lung Cancer 30.8% 69.2% 100.0%
MOSF w/Malignancy 47.6% 52.4% 100.0%
MOSF w/Sepsis 46.1% 53.9% 100.0%
Total 44.3% 55.7% 100.0%Nun fügen wir zusätzlich zu den Prozentangaben die Anzahlen hinzu:
rhc %>%
tabyl(cat1, sex) %>%
adorn_totals(where = "row") %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting() %>%
adorn_ns(position = "front") %>%
adorn_title(
row_name = "Sjukdom",
col_name = "Kön") Kön
Sjukdom Female Male
ARF 1108 (43.6%) 1382 (43.3%)
CHF 143 (5.6%) 313 (9.8%)
Cirrhosis 81 (3.2%) 143 (4.5%)
Colon Cancer 5 (0.2%) 2 (0.1%)
Coma 230 (9.0%) 206 (6.5%)
COPD 208 (8.2%) 249 (7.8%)
Lung Cancer 12 (0.5%) 27 (0.8%)
MOSF w/Malignancy 190 (7.5%) 209 (6.5%)
MOSF w/Sepsis 566 (22.3%) 661 (20.7%)
Total 2543 (100.0%) 3192 (100.0%)Mit dem Package flextable, dessen Funktionen wie im folgenden Beispiel direkt angewendet werden können, lässt sich die Tabelle direkt in Microsoft Word, PowerPoint, HTML oder als Bild speichern. Die Funktion save_as_docx() speichert die Tabelle in Microsoft Word. Alternativ können die Funktionen save_as_html(), save_as_word(), save_as_ppt() oder save_as_image() verwendet werden.
install.packages("flextable")
library(flextable)
rhc %>%
tabyl(cat1, sex) %>%
adorn_totals(where = "row") %>%
adorn_percentages(denominator = "col") %>%
adorn_pct_formatting() %>%
adorn_ns(position = "front") %>%
flextable() %>% # erstellt eine flextable
autofit() %>% # Stellt maximal 1 Zeile pro Zelle sicher
save_as_docx(path="min_tabell.docx") # Speichert im Word-Format
Crosstable
library(crosstable)Wir erstellen nun eine Kreuztabelle für sex und death. Für percent_pattern geben wir eine spezielle Funktion an (diese müssen Sie sich nicht merken):
crosstable(data=rhc,
# Variablen für die Kreuztabelle
cols=c(age, sex),
# Welche Prozentangaben sollen angezeigt werden?
total = "both",
# Wie sollen die Prozentangaben dargestellt werden?
percent_pattern="{n} ({p_row}/{p_col})") %>%
# Ansprechendere Formatierung
as_flextable()
Wie Sie sehen, hat die Funktion keine Kreuztabelle ergeben. Das liegt daran, dass wir das Argument by vergessen haben, was wir nun korrigieren:
crosstable(rhc,
cols=c(age, sex),
by=death,
total = "both",
percent_pattern="{n} ({p_row}/{p_col})") %>%
as_flextable()
Die Funktion kann verwendet werden, um alle Variablen stratifiziert nach beispielsweise death zu inspizieren. Um alle Variablen zu inspizieren, wird cols=everything() angegeben:
crosstable(rhc,
cols=everything(),
by=death,
total = "both",
percent_pattern="{n} ({p_row}/{p_col})") %>%
as_flextable()
Die Abbildung ist gekürzt.