In vielen Bereichen (Medizin, Ökonomie usw.) ist eine einleitende Beschreibung der Studienpopulation erforderlich. Eine solche Beschreibung bildet in der Regel die Table 1 der Studie, also die erste Tabelle der Publikation. Die Erstellung der Table 1 gehört somit zu vielen Studien dazu. Für die Table 1 verwenden wir das Package tableone. Die Anwendung dieses Packages ist sehr einfach und wird im Folgenden Schritt für Schritt gezeigt.
Laden Sie zunächst tidyverse und installieren und laden Sie anschließend tableone:
## tidyverse laden
library(tidyverse)
## tableone installieren
install.packages("tableone")
## tableone laden
library(tableone)In diesem Beispiel verwenden wir Right Heart Catetherization (RHC), eine klinische Studie. Laden Sie die Daten mit dem folgenden Befehl in R. Wie unten zu sehen ist, speichern wir die Daten im Objekt rhc.
## Daten importieren
rhc <- read.csv("https://hbiostat.org/data/repo/rhc.csv", header = TRUE)Die Variablennamen in einem Data Frame eignen sich nicht immer für die Darstellung in einem Bericht. Deshalb verwenden wir das Package labelled, mit dem sich jeder Variablen ein Label (eine Beschriftung) zuweisen lässt, das in Präsentationen und Berichten verwendet werden kann. Installieren und laden Sie das Package labelled:
install.packages("labelled")
library(labelled)Aus den Daten in rhc wählen wir die Spalten (Variablen) aus, die in die Table 1 aufgenommen werden sollen.
rhc2 <- select(rhc,
adld3p,
age,
alb1,
amihx,
aps1,
bili1,
ca,
card,
cardiohx,
cat1,
cat2,
chfhx,
chrpulhx,
crea1,
death)Als Nächstes geben wir jeder Variablen ein Label. Dies geschieht mit folgendem Code:
var_label(rhc2) <- list(adld3p = "ADL",
age = "Age (years)",
alb1 = "Albumin (g/L)",
amihx = "Definite Myocardial Infarction",
aps1 = "APACHE score",
bili1 = "Bilirubin",
ca = "Cancer",
card = "Cardiovascular Diagnosis",
cardiohx = "Cardiovascular disease",
cat1 = "Primary disease category",
cat2 = "Secondary disease category",
chfhx = "Congestive Heart Failure",
chrpulhx = "Chronic Pulmonary Disease",
crea1 = "Creatinine",
death = "Death at 180 days")Erstellen Sie dann das erste Objekt, das wir results nennen. Die verwendete Funktion heißt CreateTableOne und hat die Argumente vars, strata und data. Wir legen fest, dass vars alle Spaltennamen in rhc2 umfasst (names(rhc2)) und dass strata die Spalte death ist. Dadurch erhalten wir eine nach death stratifizierte Table 1. Außerdem geben wir an, dass data aus rhc2 stammt.
results <- CreateTableOne(vars=names(rhc2),
strata="death",
data=rhc2)Im nächsten Schritt wenden wir die Funktion print() auf das vorherige Objekt (results) an. Mit print wird gesteuert, welche Informationen die Table 1 enthalten soll. Wie unten zu sehen ist, gibt es eine Reihe von Einstellungen, die sich nach Belieben anpassen lassen.
results2 <- as_tibble(print(results,
# Anzahl der Dezimalstellen bei kategorialen Variablen
catDigits=2,
# Anzahl der Dezimalstellen bei stetigen Variablen
contDigits=1,
# Anzahl der Dezimalstellen bei p-Werten
pDigits=5,
# Fehlende Werte in einer Spalte anzeigen
missing=TRUE,
# Angeben, ob es sich um Mittelwerte, SD oder Mediane handelt
explain=TRUE,
# Ergebnis erst ausgeben, wenn wir es anfordern
printToggle=FALSE,
# p-Werte darstellen
test=TRUE,
# Standardized Mean Difference darstellen
smd=TRUE,
# Unnötige Leerzeichen entfernen
noSpaces=TRUE,
# Sollen stattdessen die Variablen-Labels verwendet werden?
varLabels=TRUE,
# angeben, ob eine Variable nicht normalverteilt ist
nonnormal=c('age')),
# Sollen die Zeilennamen behalten werden, und wenn ja, wie soll die Spalte heißen?
rownames="Variable")
## Wenn Sie ein gewöhnliches R-Skript verwenden, geben Sie das Ergebnis wie folgt aus:
results2
## Wenn Sie R Markdown verwenden, geben Sie das Ergebnis wie folgt aus:
library(knitr)
kableone(results2)Ergebnis
| Variable | Alive | Dead | P-value | SMD | Missing |
|---|---|---|---|---|---|
| n | 2013 | 3722 | |||
| ADL (mean (SD)) | 1.0 (1.7) | 1.4 (1.9) | <0.00001 | 0.24675 | 74.9 |
| Age (years) (median ) | 58.3 | 66.2 | <0.00001 | 0.45396 | 0.0 |
| Albumin (g/L) (mean (SD)) | 3.1 (0.7) | 3.1 (0.8) | 0.02534 | 0.06359 | 0.0 |
| Definite Myocardial Infarction (mean (SD)) | 0.0 (0.2) | 0.0 (0.2) | 0.67296 | 0.01163 | 0.0 |
| APACHE score (mean (SD)) | 49.5 (18.2) | 57.5 (20.3) | <0.00001 | 0.41676 | 0.0 |
| Bilirubin (mean (SD)) | 1.7 (3.3) | 2.6 (5.4) | <0.00001 | 0.18905 | 0.0 |
| Cancer (%) | <0.00001 | 0.45295 | 0.0 | ||
| Metastatic | 36 (1.79) | 348 (9.35) | |||
| No | 1758 (87.33) | 2621 (70.42) | |||
| Yes | 219 (10.88) | 753 (20.23) | |||
| Cardiovascular Diagnosis = Yes (%) | 645 (32.04) | 1286 (34.55) | 0.05874 | 0.05327 | 0.0 |
| Cardiovascular disease (mean (SD)) | 0.2 (0.4) | 0.2 (0.4) | 0.00157 | 0.08850 | 0.0 |
| Primary disease category (%) | <0.00001 | 0.44903 | 0.0 | ||
| ARF | 1019 (50.62) | 1471 (39.52) | |||
| CHF | 181 (8.99) | 275 (7.39) | |||
| Cirrhosis | 66 (3.28) | 158 (4.25) | |||
| Colon Cancer | 3 (0.15) | 4 (0.11) | |||
| Coma | 89 (4.42) | 347 (9.32) | |||
| COPD | 176 (8.74) | 281 (7.55) | |||
| Lung Cancer | 3 (0.15) | 36 (0.97) | |||
| MOSF w/Malignancy | 36 (1.79) | 363 (9.75) | |||
| MOSF w/Sepsis | 440 (21.86) | 787 (21.14) | |||
| Secondary disease category (%) | <0.00001 | 0.51537 | 79.1 | ||
| Cirrhosis | 6 (2.17) | 32 (3.46) | |||
| Colon Cancer | 0 (0.00) | 2 (0.22) | |||
| Coma | 20 (7.25) | 70 (7.58) | |||
| Lung Cancer | 0 (0.00) | 15 (1.62) | |||
| MOSF w/Malignancy | 20 (7.25) | 209 (22.62) | |||
| MOSF w/Sepsis | 230 (83.33) | 596 (64.50) | |||
| Congestive Heart Failure (mean (SD)) | 0.1 (0.4) | 0.2 (0.4) | <0.00001 | 0.13331 | 0.0 |
| Chronic Pulmonary Disease (mean (SD)) | 0.2 (0.4) | 0.2 (0.4) | 0.02294 | 0.06342 | 0.0 |
| Creatinine (mean (SD)) | 1.9 (2.0) | 2.3 (2.1) | <0.00001 | 0.17245 | 0.0 |
| Death at 180 days = Yes (%) | 0 (0.00) | 3722 (100.00) | <0.00001 | NaN | 0.0 |