Author: Naki Cam, myBI, DPDHL IT Services GmbH Reference: Hadley Wickham, R for Data Science
notice: feel free to share !
# Pakete laden
library(tidyverse)
library(nycflights13)
Um die grundlegenden Manipulationsverben von dplyr zu untersuchen, verwenden wir nycflights13:: flights. Dieser Dataframe enthält alle 336.776 Flüge, die 2013 von New York City abgegangen sind.
# Einblick in die Daten
# Das dataframe wird als "tibble" angezeigt, das bedeutet es werden nur Zeilen angezeigt, welche auf die Bildschirmseite passen!
head(flights)
# Wieviele Daten sind im dataset
dim(flights)
[1] 336776 19
# Gebe mir Details zum Datentyp von "flights"
class(flights)
[1] "tbl_df" "tbl" "data.frame"
# Zeige mir Details zur Struktur von "flights"
str(flights)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 336776 obs. of 19 variables:
$ year : int 2013 2013 2013 2013 2013 2013 2013 2013 2013 2013 ...
$ month : int 1 1 1 1 1 1 1 1 1 1 ...
$ day : int 1 1 1 1 1 1 1 1 1 1 ...
$ dep_time : int 517 533 542 544 554 554 555 557 557 558 ...
$ sched_dep_time: int 515 529 540 545 600 558 600 600 600 600 ...
$ dep_delay : num 2 4 2 -1 -6 -4 -5 -3 -3 -2 ...
$ arr_time : int 830 850 923 1004 812 740 913 709 838 753 ...
$ sched_arr_time: int 819 830 850 1022 837 728 854 723 846 745 ...
$ arr_delay : num 11 20 33 -18 -25 12 19 -14 -8 8 ...
$ carrier : chr "UA" "UA" "AA" "B6" ...
$ flight : int 1545 1714 1141 725 461 1696 507 5708 79 301 ...
$ tailnum : chr "N14228" "N24211" "N619AA" "N804JB" ...
$ origin : chr "EWR" "LGA" "JFK" "JFK" ...
$ dest : chr "IAH" "IAH" "MIA" "BQN" ...
$ air_time : num 227 227 160 183 116 150 158 53 140 138 ...
$ distance : num 1400 1416 1089 1576 762 ...
$ hour : num 5 5 5 5 6 5 6 6 6 6 ...
$ minute : num 15 29 40 45 0 58 0 0 0 0 ...
$ time_hour : POSIXct, format: "2013-01-01 05:00:00" ...
int steht für Ganzzahlen (Integer). dbl steht für Realzahlen (Double). chr steht für Zeichenvektoren oder Strings (Character). dttm steht für Datums-/ Zeitwerte (bestehend aus Datum und Uhrzeit).
# 5er Statistik zu den Daten in "flights"
summary(flights)
year month day
Min. :2013 Min. : 1.000 Min. : 1.00
1st Qu.:2013 1st Qu.: 4.000 1st Qu.: 8.00
Median :2013 Median : 7.000 Median :16.00
Mean :2013 Mean : 6.549 Mean :15.71
3rd Qu.:2013 3rd Qu.:10.000 3rd Qu.:23.00
Max. :2013 Max. :12.000 Max. :31.00
dep_time sched_dep_time dep_delay
Min. : 1 Min. : 106 Min. : -43.00
1st Qu.: 907 1st Qu.: 906 1st Qu.: -5.00
Median :1401 Median :1359 Median : -2.00
Mean :1349 Mean :1344 Mean : 12.64
3rd Qu.:1744 3rd Qu.:1729 3rd Qu.: 11.00
Max. :2400 Max. :2359 Max. :1301.00
NA's :8255 NA's :8255
arr_time sched_arr_time arr_delay
Min. : 1 Min. : 1 Min. : -86.000
1st Qu.:1104 1st Qu.:1124 1st Qu.: -17.000
Median :1535 Median :1556 Median : -5.000
Mean :1502 Mean :1536 Mean : 6.895
3rd Qu.:1940 3rd Qu.:1945 3rd Qu.: 14.000
Max. :2400 Max. :2359 Max. :1272.000
NA's :8713 NA's :9430
carrier flight tailnum
Length:336776 Min. : 1 Length:336776
Class :character 1st Qu.: 553 Class :character
Mode :character Median :1496 Mode :character
Mean :1972
3rd Qu.:3465
Max. :8500
origin dest air_time
Length:336776 Length:336776 Min. : 20.0
Class :character Class :character 1st Qu.: 82.0
Mode :character Mode :character Median :129.0
Mean :150.7
3rd Qu.:192.0
Max. :695.0
NA's :9430
distance hour minute
Min. : 17 Min. : 1.00 Min. : 0.00
1st Qu.: 502 1st Qu.: 9.00 1st Qu.: 8.00
Median : 872 Median :13.00 Median :29.00
Mean :1040 Mean :13.18 Mean :26.23
3rd Qu.:1389 3rd Qu.:17.00 3rd Qu.:44.00
Max. :4983 Max. :23.00 Max. :59.00
time_hour
Min. :2013-01-01 05:00:00
1st Qu.:2013-04-04 13:00:00
Median :2013-07-03 10:00:00
Mean :2013-07-03 05:02:36
3rd Qu.:2013-10-01 07:00:00
Max. :2013-12-31 23:00:00
# Zeilen mit filter()
# Die Funktion filter() erlaubt es, Teilmengen von #Beobachtungen basierend auf ihren Werten zu bilden.
filter(flights, month== 1, day == 1)
# in einer Variablen speichern
jan1 <- filter(flights, month== 1, day == 1)
# Inhaltsvergleich
nov_dec <- filter(flights, month %in% c(11,12))
head(nov_dec)
# Zeilen mit "NA"" Werten ermitteln
(
Null_Werte <- filter(flights, is.na(flights$dep_time) | is.na(flights$dep_delay))
)
1.) Ermitteln Sie alle Flüge, die: a) eine Ankunftsverspätung von zwei oder mehr Stunden hatten, b) nach Houston (IAH oder HOU) geflogen sind, c) von United, American oder Delta durchgeführt wurden, d) im Sommer (Juli, August und September) abgeflogen sind, e) mehr als zwei Stunden zu spät angekommen, aber nicht verspätet gestartet sind, f) mindestens eine Stunde Verspätung hatten, aber mehr als 30 Minuten im Flug aufgeholt haben, g) zwischen Mitternacht und 6 Uhr (jeweils inklusive) abgeflogen sind.
? flights
(
two <- filter(flights, between(month, 1,2))
)
(
three <- filter(flights, is.na(dep_time))
)
(NA ^ 0 )
[1] 1
(NA | TRUE )
[1] TRUE
(FALSE & NA)
[1] FALSE
(NA * 0)
[1] NA
(
arrange(flights, year, month, day)
)
(
arrange(flights, desc(arr_delay))
)
Übungen: 1. Wie können Sie mit arrange() alle fehlenden Werte am Anfang einsortieren? (Hinweis: Verwenden Sie is.na().) 2. Sortieren Sie flights, um die Flüge mit den größten Verspätungen zu ermitteln. Suchen Sie die Flüge, die am frühesten gestartet sind. 3. Sortieren Sie flights, um die schnellsten Flüge zu ermitteln. 4. Welche Flüge hatten die längsten Reisezeiten? Bei welchen Flügen waren die Reisezeiten am kürzesten?
# Select columns by name
(
select(flights, dest, hour, minute)
)
(
select(flights, dest:minute)
)
# Select all columns except those from year to day (inclusive)
(
select (flights, -(year:day))
)
Es gibt eine Reihe von Hilfsfunktionen, die Sie innerhalb von select() verwenden können: starts_with(" abc“) sucht nach Namen, die mit »abc« beginnen. ends_with(” xyz“) sucht nach Namen, die auf »xyz« enden. contains(” ijk“) sucht nach Namen, die »ijk« enthalten. matches(”(.)\ 1“) wählt Variablen aus, die einem regulären Ausdruck entsprechen, im angegebenen Beispiel allen Variablen, die sich wiederholende Zeichen enthalten. num_range(” x“, 1: 3) sucht nach x1, x2 und x3.
Mit ?select zeigen Sie weitere Details an.
?select
# nutze rename um Variablen umzubenennen
(
rename(flights, tail_num = tailnum)
)
# verschieben von Variablen an den Beginn des dataframe
(
select(flights, time_hour, dest, hour, minute, everything())
)
Denken Sie sich möglichst viele Wege aus, um dep_time, dep_delay, arr_time und arr_delay von flights auszuwählen.
Was passiert, wenn Sie den Namen einer Variablen mehrfach in einen select()-Aufruf einbinden?
Welche Aufgabe hat die Funktion one_of()? Warum könnte sie in Verbindung mit dem folgenden Vektor hilfreich sein?
vars <- c( “year”, “month”, “day”, “dep_delay”, “arr_delay” )
(
select(flights, dep_time, dep_delay, arr_time, arr_delay)
)
(
select(flights, dep_time:arr_delay)
)
(
# dupikate in spaltennamen werden ignoriert
select(flights, dep_time, dep_time)
)
(
?one_of
)
vars <- c( "year", "month", "day", "dep_delay", "arr_delay" )
(
select(flights, one_of(vars))
)
(
# Groß- und Kleinschreibung wird ignoriert
select(flights, contains("TIME"))
)