vignette("tibble")
10 Tibbles
In diesem Kapitel geht es um das Paket tibble
, das Teil des Tidyverses ist. Die Vignette hilft einen Überblick über Tibbles zu bekommen.
Ursprünglich waren Datentabellen intern in R immer sogenannte Data Frames. Man erzeugte diese mit der Funktion
data.frame()
. Tibbles stellen eine modernere Version davon dar und haben gewisse Vorteile gegenüber Data Frames.Mit der Funktion
as_tibble()
können diverse Formate (sofern es sinnvoll ist) in einen Tibble transformieren werden, unter anderem auch Vektoren und Data Frames.
Beispiele
as_tibble(LETTERS) # letters bzw. LETTERS sind Vektoren
# A tibble: 26 × 1
value
<chr>
1 A
2 B
3 C
4 D
5 E
6 F
7 G
8 H
9 I
10 J
# ℹ 16 more rows
as_tibble(iris) # iris ist ein Data Frame
# A tibble: 150 × 5
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
<dbl> <dbl> <dbl> <dbl> <fct>
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
# ℹ 140 more rows
as_tibble(UCBAdmissions) # UCBAdmissions ist ein 3-dimensionales Array
# A tibble: 24 × 4
Admit Gender Dept n
<chr> <chr> <chr> <dbl>
1 Admitted Male A 512
2 Rejected Male A 313
3 Admitted Female A 89
4 Rejected Female A 19
5 Admitted Male B 353
6 Rejected Male B 207
7 Admitted Female B 17
8 Rejected Female B 8
9 Admitted Male C 120
10 Rejected Male C 205
# ℹ 14 more rows
10.1 Erstellen von Tibbles
Man kann Tibbles mit der Funktion tibble()
aus einzelnen Vektoren erstellen. Dies geschieht analog zu den Data Frames, die auf die gleiche Weise mit data.frame()
erzeugt werden.
Vektoren der Länge 1 werden automatisch recycled.
Zeichenketten bleiben Zeichenketten und werden nicht zu Faktoren konvertiert, es werden keine Zeilennamen vergeben und Merkmalnamen werden nicht geändert (dies ist bei
data.frame()
anders).Es ist möglich nicht-syntaktische Namen zu vergeben, die keine gültigen R-Variablennamen sind. Diese müssen in Backticks (`) (Bemerkung: auf Deutsch heißt der Akzent rückwärts geneigtes Hochkomma, was eher sperrig ist, oder der Gravis, was aber keiner kennt.) gesetzt werden. Beim Aufruf der Merkmale (z.B. bei Funktionen aus dem
ggplot2
-Paket oder demdplyr
-Paket) müssen die Backticks auch gesetzt werden. Man sollte im Allgemeinen aber davon absehen solche Merkmalsnamen zu verwenden.
Beispiele
tibble(u = 1:4,
v = 1,
w = u^2 + v,
x = LETTERS[1:4]
)
# A tibble: 4 × 4
u v w x
<int> <dbl> <dbl> <chr>
1 1 1 2 A
2 2 1 5 B
3 3 1 10 C
4 4 1 17 D
tb <- tibble(
`:)` = "smile",
` ` = "space",
`2000` = "number"
)
tb
# A tibble: 1 × 3
`:)` ` ` `2000`
<chr> <chr> <chr>
1 smile space number
10.2 Tribbles
Tribble steht für
tr
ansposed tibble
, weil die Daten zeilen- statt spaltenweise angegeben werden.Tribbles werden mit der Funktion
tribble()
erzeugt und sind dafür geeignet direkt in R Datentabellen einzugeben.Die Merkmalnamen werden als Formel, das heißt beginnend mit einer Tilde, angegeben. Diese geben vor, wie viele Spalten der entstehenden Tibble haben wird.
Ein Vorteil ist offenbar, dass es sehr einfach ist, ein neue Zeile hinzuzufügen – auch in der Mitte des Tibbles. Dies ist bei Tibbles, bei denen man jedes Merkmal (also die Spalte) als Vektor eingibt, schwieriger.
Die Zeile
#--|--|----
ist ein Kommentar und dient dazu, die Überschrift hervorzuheben.Fun fact: Tribbles
tribble(
~x, ~y, ~z,
#--|--|----#
"a", 2, 3.6,
"b", 1, 8.5,
)
# A tibble: 2 × 3
x y z
<chr> <dbl> <dbl>
1 a 2 3.6
2 b 1 8.5
tribble(
~x, ~y, ~z, # y integer
"a", 2L, 3.6,
"b", 1L, 8.5,
)
# A tibble: 2 × 3
x y z
<chr> <int> <dbl>
1 a 2 3.6
2 b 1 8.5
10.3 Ausgabe von Tibbles und Data Frames
Im Wesentlichen gibt es zwei große Unterschiede zwischen Tibbles und Data Frames: die Darstellung und das Extrahieren eines Merkmals.
Ruft man einen Tibble auf, so werden die ersten 10 Zeilen dargestellt, sowie alle Merkmale, die auf den Bildschirm passen. Ferner sieht man unterhalb der Merkmalnamen, um was für einen Datentyp es sich bei dem jeweiligen Merkmal handelt. Die Darstellung von Data Frames ist vor allem bei großen Datensätzen wesentlich unübersichtlicher.
Mit der Funktion
print()
kann sowohl die Anzahl der Ausprägungen (n=
) als auch die Breite (width=
) der Ausgabe kontrolliert werden. Mit der Optionwidth=Inf
werden alle Merkmale dargestellt.
# A tibble: 336,776 × 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
<int> <int> <int> <int> <int> <dbl> <int> <int>
1 2013 1 1 517 515 2 830 819
2 2013 1 1 533 529 4 850 830
3 2013 1 1 542 540 2 923 850
4 2013 1 1 544 545 -1 1004 1022
# ℹ 336,772 more rows
# ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
# tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
# hour <dbl>, minute <dbl>, time_hour <dttm>
Es ist darauf zu achten, dass die Breite nicht in Anzahl der Spalten, sondern in Anzahl der Zeichen angegeben wird.
- Eine weitere Möglichkeit zur Darstellung ist die Funktion
View()
, die einen Tab mit Scrollbars im Editor öffnet und dort den gesamten Datensatz anzeigt.
10.3.1 Steuerung der Ausgabe von Tibbles mit options()
Mit der Funktion options()
können R neue Standard-Einstellungen übergeben werden.
- Für die Darstellung von Tibbles gibt es diese beiden Möglichkeiten:
options(tibble.print_max = n,
tibble.print_min = m)
- falls der Tibble mehr als
n
Zeilen hat, zeige nurm
Zeilen. - Falls immer alle Zeilen gezeigt werden soll, verwendet man
zeigt immer alle Spalten, unabhängig von der Breite des Bildschirms.
- Ein paar weitere praktische Optionen (es gibt noch sehr viel mehr!) sind:
Option | Typ | Standard | Bedeutung |
---|---|---|---|
digits |
int |
7 |
Anzahl der zählenden Ziffern, die bei der Ausgabe von Zahlen dargestellt werden. Möglich sind ganze Zahlen zwischen 1 und 22. |
max.print |
int |
99999 |
Maximale Länge der Ausgabe bei der Darstellung von Vektoren, Listen oder Datentabellen (Data Frames, keine Tibbles). |
OutDec |
chr |
"." |
Dezimaltrenner bei der Ausgabe. |
scipen |
int |
0 |
Bestrafungsterm für die Wahl, ob Zahlen in exponentieller Schreibweise geschrieben werden sollen oder nicht (7e4 vs. 70000 ). Positive Zahlen geben eine Tendenz zu nicht-exponentieller Schreibweise. |
10.4 Extrahieren eines Merkmals aus einem Tibble
- Um auf einzelne Merkmale eines Tibbles als Vektor zuzugreifen, gibt es mehrere Möglichkeiten:
-
Name des Merkmals (
$NameMerkmal
oder[["NameMerkmal"]]
) -
Position des Merkmals (
[[PositionMerkmal]]
).
-
Name des Merkmals (
- Die Funktion
pull()
aus dem Paketdplyr
macht das Gleiche und kann ein Merkmal sowohl über den Namen als auch die Position extrahieren.- Verwendet man die Pipe, muss man für
$
bzw.[[ ]]
einen Platzhalter verwenden.
- Verwendet man die Pipe, muss man für
# Die Beispiele werden zu
|> .$x
df |> .[["x"]]
df |> pull(x) # kein Platzhalter! df
# A tibble: 5 × 2
x y
<dbl> <dbl>
1 0.561 -0.992
2 0.298 -0.986
3 0.642 0.676
4 0.128 -2.13
5 0.292 0.481
# Subsetting mittels Name:
df$x
[1] 0.5608 0.2983 0.6424 0.1285 0.2918
df[["x"]]
[1] 0.5608 0.2983 0.6424 0.1285 0.2918
pull(df, x)
[1] 0.5608 0.2983 0.6424 0.1285 0.2918
# Subsetting mittels Position:
df[[1]]
[1] 0.5608 0.2983 0.6424 0.1285 0.2918
pull(df, 1)
[1] 0.5608 0.2983 0.6424 0.1285 0.2918