|
Schlagwort
|
Paket
|
Beschreibung
|
PDF-Dat ei
|
|
Allgemeines
|
Hmisc
|
Das Paket Hmisc (Harrell Miscellaneous) ist eine Sammlung nützlicher Funktionen aus verschiedenen Bereichen. Gehört praktischen in jeden Haushalt!
|
|
|
Allgemeines
|
MASS
|
Das Paket Main Package of Venables and Ripley's MASS wird über die R-Installation geliefert, muss also nur noch in die R-Umgebung geladen werden. Dieses Paket ist eine Sammlung verschiedener Funktionen und Beispieldatensätzen. Auch beinhaltet diese Paket die Funktion lda(), siehe Paket LinDA.
|
|
|
Allgemeines
|
reshape
reshape2
|
Über das Paket reshape können Datenobjekte “redesigned” werden. Die Voraussetzung zur Anwendung ist das Paket plyr. Im Folgenden Beispiel wird das Datenobjekt list in einem data.frame-Objekt gewandelt:
> Liste [[1]] [1] 11 22 33 44 55 66
[[2]] [1] 111 222 333 444 555 666
[[3]] [1] "A" "B" "C" "E" "F" "G"
> Liste_a <- melt(Liste) > Liste_a value L1 1 11 1 2 22 1 3 33 1 4 44 1 5 55 1 6 66 1 7 111 2 8 222 2 9 333 2 10 444 2 11 555 2 12 666 2 13 A 3 14 B 3 15 C 3 16 E 3 17 F 3 18 G 3
Das ist natürlich nicht die wesentliche Qualität des Paketes, sondern die Aggregierungs-Funktion cast() die nach melt() auf Datenobjekt angewendet werden kann. Schauen Sie sich das Paketbeispiel einfach mal an.
|
|
|
Allgemeines
|
zoo
|
Das Paket Z's ordered observations ist eine Funktionssammlung für geordnete, indizierte Zeitreihenanalysen. Beinhaltet z. B. die Funktion “Rollender Mittelwert” rollmean().
|
|
|
Allgemeines
|
nortest
|
Verschiedene Testverfahren auf Normalität:
- Anderson-Darling
- Cramer-von Mises
- Lilliefors (Kolmogorov-Smirnov)
- Pearson chi-square
- Shapiro-Francia
|
|
|
Allgemeines
|
doBy
|
Über die Funktionen des Paketes doBy können für gruppierte Beobachtungen elegant summarische statistische Parameter ermittelt werden. Die Bandbreite erstreckt sich von den R-Standardfunktion bis zu eigenen Funktionen. Aber wie immer, ein Beispiel sagt mehr als 1000 Worte:
Für das Beispiel wird der "ChickWeight-datasets" der R-Basic-Installation, umbenannt in "Hühner", verwendet:
> str(Hühner) Classes ‘nfnGroupedData’, ‘nfGroupedData’, ‘groupedData’ and 'data.frame': 578 obs. of 4 variables: $ weight: num 42 51 59 64 76 93 106 125 149 171 ... $ Time : num 0 2 4 6 8 10 12 14 16 18 ... $ Chick : Ord.factor w/ 50 levels "18"<"16"<"15"<..: 15 15 15 15 15 15 15 15 15 15 ... $ Diet : Factor w/ 4 levels "1","2","3","4": 1 1 1 1 1 1 1 1 1 1 ...
- attr(*, "formula")=Class 'formula' length 3 weight ~ Time | Chick .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> - attr(*, "outer")=Class 'formula' length 2 ~Diet .. ..- attr(*, ".Environment")=<environment: R_EmptyEnv> - attr(*, "labels")=List of 2 ..$ x: chr "Time" ..$ y: chr "Body weight" - attr(*, "units")=List of 2 ..$ x: chr "(days)" ..$ y: chr "(gm)"
> head(Hühner) # Schauen wir uns die ersten paar Daten über head an Grouped Data: weight ~ Time | Chick weight Time Chick Diet 1 42 0 1 1 2 51 2 1 1 3 59 4 1 1 4 64 6 1 1 5 76 8 1 1 6 93 10 1 1
Time ist als Altersklassifikation zu verstehen. Zum Prüfen der später doBy-Funktion schauen wir uns die Altersklassifizierung "12" an:
> Hühner_T12 <- subset(Hühner, Hühner$Time == "12") > Hühner_T12 Grouped Data: weight ~ Time | Chick weight Time Chick Diet 7 106 12 1 1 19 122 12 2 1 31 115 12 3 1 43 102 12 4 1 55 141 12 5 1 67 141 12 6 1 79 146 12 7 1 91 110 12 8 1 102 90 12 9 1 114 89 12 10 1 126 168 12 11 1 138 119 12 12 1 150 71 12 13 1 162 164 12 14 1 174 67 12 15 1 182 54 12 16 1 189 98 12 17 1 203 82 12 19 1 215 77 12 20 1 227 217 12 21 2 239 108 12 22 2 251 127 12 23 2 263 70 12 24 2 275 146 12 25 2 287 136 12 26 2 299 115 12 27 2 311 145 12 28 2 323 134 12 29 2 335 115 12 30 2 347 123 12 31 3 359 159 12 32 3 371 137 12 33 3 383 164 12 34 3 395 201 12 35 3 407 145 12 36 3 419 103 12 37 3 431 128 12 38 3 443 130 12 39 3 455 154 12 40 3 467 155 12 41 4 479 160 12 42 4 491 184 12 43 4 503 127 12 44 4 513 135 12 45 4 525 144 12 46 4 537 148 12 47 4 549 154 12 48 4 561 152 12 49 4 573 155 12 50 4 > mean(Hühner_T12$weight) [1] 129.2449 > sd(Hühner_T12$weight) [1] 34.1196
Eine Übersicht über den gesamten Datensatz Hühner über die Time- Klassifikation bezüglich Mittelwert und Standardabweichung für das Hühnergewicht weight wird über die Funktion summaryBy ausgegeben:
> Übersicht <- summaryBy(.~Time, data=Hühner, FUN = c(mean, sd)) > Übersicht Time weight.mean weight.sd 1 0 41.06000 1.132272 2 2 49.22000 3.688316 3 4 59.95918 4.495179 4 6 74.30612 9.012038 5 8 91.24490 16.239780 6 10 107.83673 23.987277 7 12 129.24490 34.119600 8 14 143.81250 38.300412 9 16 168.08511 46.904079 10 18 190.19149 57.394757 11 20 209.71739 66.511708 12 21 218.68889 71.510273
Siehe Zeile 7 und vergleiche mit mean und sd weiter oben!
Daneben Time weight die einzige kontinuierliche Variable ist, wird der .-Operator nur für weight interpretiert. Die Formel-Ausprägung zeigt das gleiche Resultat:
> Übersicht <- summaryBy(weight~Time, data=Hühner, FUN = c(mean, sd))
Das Paket doBy gibt es auch als R-Commander-Plugin:
Die Ausführung, ohne Result-Data-Frame, zeigt die erwartete Schätzung:
|
|
|
Allgemeines
|
stringr
|
Das Paket stringr beinhaltet zahlreiche effektive Funktionen zur Zeichenketten(String-)bearbeitung. Die folgenden kleinen Beispiele sollen einen Eindruck über die Möglichkeiten des Paketes vermitteln:
- Konstruieren wir 2 Zeichenketten:
- Über die Funktion length() erhalten wir das bekannte Ergebnis, dass 1 Element in den Objekten a und b enthalten ist:
Um einzelne Zeichen der Zeichenkette zu bearbeiten, hilft uns diese Funktion nicht nicht weiter. Hier kommen die Funktionen des Paketes stringr zum Zuge:
- Über die Funktion str_length() des Paketes, erhalten wir die Anzahl der Zeichen in den Zeichenketten:
- Über die Funktion str_extract_all() kann nun die Zeichenkette zerlegt werden. Die Zeichenkette wird als Liste ausgegeben:
> str_extract_all(a, regex("[a-z]", TRUE)) [[1]] [1] "E" "r" "s" "t" "e" "Z" "e" "i" "c" "h" "e" "n" "k" "e" "t" "t" "e"
> str_extract_all(b, regex("[a-z]", TRUE)) [[1]] [1] "Z" "w" "e" "i" "t" "e" "Z" "e" "i" "c" "h" "e" "n" "k" "e" "t" "t" "e"
- Auf zum Beispiel das 2. Zeichen der Zeichenkette a kann über Listen-Argumente zugegriffen werden:
- Auch können Sub-Zeichenketten innerhalb der Zeichenkette elegant lokalisiert werden:
Das Paket bietet wie erwähnt, noch weitere hilfreiche Funktionen zur Zeichenkettenanalyse und -bearbeitung.
|
|
|
Allgemeines
|
LinDA
|
Lineare Dskriminanzanalyse LinDA
LinDA stellt im wesentlichen eine Variante der Funktionen lda(), predict() und plot() dar, die in der Benutzung und Ausgabe vereinfacht wurden. Das Verfahren “lineare Diskriminanzanalyse”€ und Nutzung des Paketes wird auf www.faes.de beschrieben. Die Voraussetzung ist, dass der Datensatz auf dem die Schätzung der Diskriminanzfunktion durchgeführt werden soll, als 1. Spalte die Gruppenvariable enthält:
|
|
|
Business Analytics
|
RcmdrPlugin.BCA
|
Das R-Commander-Plugin BCA ist eine Ergänzung des R-Commanders zur Geschäftsdatenanalyse und um sich mit Data-Mining-Verfahren vertraut zu machen. Diese Verfahren werden in dem Buch Customer and Business Analytics von Daniel S. Putler und Robert E. Krider, die auch die Designer des Plug-In’s sind, ausführlich beschrieben. Wie für R-Commander-Plugin’s üblich, werden die R-Commander-Menüs entsprechend erweitert. Als Beispiel wird hier der Bereich der Modellbildung gezeigt:

|
|
|
Business Analytics
|
Rattle
|
Rattle ist ein Paket zur Geschäftsdatenanalyse unter dem Schlagwort “Data Mining”. Rattle stellt eine eigene GUI zur Datenanalyse zur Verfügung und diese wird in dem Buch Data Mining with Rattle und R von Graham Williams ausführlich beschrieben. Die GUI wird nach dem Laden des Paketes rattle durch Ausführen der Funktion rattle() gestartet:
Rattle biete umfangreiche Funktionen zum Datenmanagement, zur Modellbildung und deren Beurteilung an.
|
|
|
Grafik
|
networkD3
|
Über das Paket networkD3 lassen sich interaktive Netzwerkgrafiken auf Basis des htmlwidgets-Rahmen erzeugen. Hier ein Beispiel dazu:
> library(magrittr) # Brauchen wir später zum Speichern
> library(networkD3) > src <- c("A", "A", "A", "A","B", "B", "C", "C", "D") > target <- c("B", "C", "D", "J", "E", "F", "G", "H", "I") > networkData <- data.frame(src, target) > networkData src target 1 A B 2 A C 3 A D 4 A J 5 B E 6 B F 7 C G 8 C H 9 D I
Über die Funktion simpleNetwork() wird eine HTML-Datei im htmlwidgets-Framework erzeugt und als interaktive Grafik im Browser ausgegeben:
Mithilfe des magritter-Paketes, wird die Grafik gespeichert und lässt sich zu z. B. in eine HTML-Umgebung einbinden:
Beispiel_files enthält die nötigen Hilfsdateien. Mit einem Doppelklick auf die Datei Beispiel.html wird die Grafik im Browser angezeigt und "aktiv" angeboten.
|
|
|
Grafik
|
lattice
|
Grafik mit Lattice! Das Paket lattice wird über die R-Installation geliefert, muss also nur noch in die R-Umgebung geladen werden. Die Stärke des Paketes lattice liegt in der übersichtlichen Darstellung mehrere Datenobjekte in panels, d. h. auf einer Grafikoberfläche werden die Daten in Bereichen dargestellt. Hier ein einfaches Beispiel:
> Daten Wirkstoff.A Pruefer 1 99.1 Karl 2 99.3 Karl 3 98.8 Peter 4 98.9 Karl 5 99.3 Peter 6 99.2 Peter 7 99.5 Karl 8 99.4 Peter 9 99.0 Peter
> bwplot(~ Wirkstoff.A | factor(Pruefer), data = Daten)
Die Prüfergebnisse des Prüfers Karl werden über factor(Pruefer) gesammelt und auf einem panel dargestellt. Analoges gilt für den Prüfer Peter. Eine gute Einführung in Lattice finden Sie hier...!
|
|
|
Grafik
|
gplots
|
Das Paket gplots bietet Ihnen einige interessante Grafikerweiterungen an. Als Beispiel sei hier die erweiterte Ausgabe eines Balkendiagramm um den Vertrauensbereich der dargestellten Merkmale gezeigt. Die Beispieldaten sind im Objekt Daten abgelegt und haben folgende Struktur:
> Daten 10-15 16-20 21-25 26-30 31-35 Merkmal A 50 48 35 30 15 Merkmal B 45 58 38 39 25 Merkmal C 62 59 45 34 23 Merkmal D 35 38 32 36 28
Nach dem Laden des Paketes gplots (und den weiteren geforderten Pakete wie bitops, caTools, gtools und gdata), können Sie über folgenden Funktionsaufruf ...
VB_u <- Daten * 0.9 # Vertrauensbereich unten VB_o <- Daten * 1.1 # Vertrauensbereich oben barplot2(Daten, beside = TRUE, col = c("lightblue", "mistyrose", "lightcyan", "lavender"), legend = rownames(Daten), ylim = c(0, 100), main = "Balkendiagramm mit Vertrauensbereich", font.main = 4, sub = "Vertrauensbereich 10%", col.sub = "blue", cex.names = 1.5, plot.ci = TRUE, ci.l = VB_u, ci.u = VB_o, plot.grid = TRUE)
... folgende grafische Darstellung eines Balkendiagramms mit den Vertrauensbereichsgrenzen erhalten:
|
|
|
Grafik
|
ggplot
|
Nachfolgend wir eine kurze Übersicht über die grafischen Möglichkeiten mit des ggplot-Pakets gegeben. Die Voraussetzung ist natürlich das Einbinden des Paketes ggplot in die R-Umgebung. Das Erstellen einer Grafik weicht von der gewohnten R-Vorgehensweise ab. In ggplot spielt das Layer-Konzept die wesentliche Rolle. Das bedeutet, das Grafiken die im ggplot- Syntax erstellt wurden, nachträglich mit einem neuen Layer (Schicht) belegt werden können und es ist nicht nötig, die Grafik neu zu erstellen.
Die folgenden Beispiel basieren auf den mtcars-Datensatze:
> str(mtcars) 'data.frame': 32 obs. of 11 variables: $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : num 6 6 4 6 8 6 8 4 4 6 ... $ disp: num 160 160 108 258 360 ... $ hp : num 110 110 93 110 175 105 245 62 95 123 ... $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec: num 16.5 17 18.6 19.4 17 ... $ vs : num 0 0 1 1 0 1 0 1 1 1 ... $ am : num 1 1 1 0 0 0 0 0 0 0 ... $ gear: num 4 4 4 3 3 3 3 4 4 4 ... $ carb: num 4 4 1 1 2 1 4 2 2 4 …
Zur gewünschten grafischen Darstellung, wird der Skalentyp num der Variable cyl in den Typ Factor transformiert: > mtcars$cyl <- factor(mtcars$cyl) > str(mtcars) 'data.frame': 32 obs. of 11 variables: $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : Factor w/ 3 levels "4","6","8": 2 2 1 2 3 2 3 1 1 2 ... $ disp: num 160 160 108 258 360 ... $ hp : num 110 110 93 110 175 105 245 62 95 123 ... $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec: num 16.5 17 18.6 19.4 17 ... $ vs : num 0 0 1 1 0 1 0 1 1 1 ... $ am : num 1 1 1 0 0 0 0 0 0 0 ... $ gear: num 4 4 4 3 3 3 3 4 4 4 ... $ carb: num 4 4 1 1 2 1 4 2 2 4 …
1. Ausgabe, ohne explizite Angabe der "Geometrie" des Grafikobjektes:
> qplot(cyl, mpg, data = mtcars)

Im 2. Beispiel wird die Geometrie des zu erstellenden Grafikobjektes angegeben:
> Grafik <- qplot(cyl, mpg, data = mtcars, geom = "boxplot")
Die Grafik wurde im Objekt Grafik gespeichert und wird erst mit Grafik-Eingabe auf der Konsole ausgegeben:
> Grafik

Das hat bisher noch nichts mit dem Layer-Konzept zu tun, zeigt aber schon sehr schön das Grundkonzept von ggplot, nämlich das Annahmen gemacht werden. Das Geometrie-Konzept (geom = "boxplot") gehört dazu. Es beschreibt, wie die Daten ausgegeben werden sollen. In diesem Beispiel als Boxplot. Dazu gehört, dass der Anwender sich weniger Syntax-Gedanken über das Erstellen einer Grafik machen muss. Vergleichbar sieht obige Grafik ohne ggplot in R wie folgt aus:
Kommen wir endlich zum Layer-Konzept! Der Boxplot wurde im Grafikobjekt Grafik gespeichert. Nun fügen wir als neuen Layer einen Grafiktitel über ggtitle zu:
Sie können anhand des obigen Funktionsaufrufes erkennen, dass die Grafik Grafik nicht neu erzeugt wurde, sondern der Grafiktitel wurde über ggtitle als Layer dazuaddiert.
Um das Layer-Konzept zu verdeutlichen, bemühen wir ein neues Beispiel: Wir vermuten einen Zusammenhang zwischen Gewicht (wt) und dem Kraftstoffverbrauch (mpg) und erstellen eine grafische Übersicht für beide Variablen als Streudiagramm:
Durch das Layer-Konzept kann nun einfach die Geometrie lineare Glättung dem Grafik-Objekt Grafik zugefügt werden:
> qplot(wt, mpg, data = mtcars) + geom_smooth(method = "lm")
Neben der linearen Regressionsfunktion wird noch der Vertrauensbereich ausgegeben. Aus Sicht des Anwenders - und das ist was zählt - ist das Konzept bestechend einfach!
Über einen für den Anwender einfachen Funktionsaufruf lassen sich überaus ansehnliche Grafiken erstellen. Es wurde ja schon erwähnt, dass ggplot-Funktionen Annahmen machen, welche Grafik erstellt werden soll. Hier ist besonders die Funktion qplot zu erwähnen, die wir schon einige Male verwendet haben. Das folgende Beispiel greift auf den Datensatz quakes zurück, der die Örtlichkeiten und die entsprechenden Erdbebendaten der Fidschi-Inselgruppe beinhaltet:
The data set give the locations of 1000 seismic events of MB > 4.0. The events occurred in a cube near Fiji since 1964.
A data frame with 1000 observations on 5 variables. [,1] lat numeric Latitude of event [,2] long numeric Longitude [,3] depth numeric Depth (km) [,4] mag numeric Richter Erdbebenstärke [,5] stations numeric Number of stations reporting
Über folgenden qplot-Funktionsaufruf, wobei die Variablen depth und mag als zusätzlichen Informationsträger mit gleichzeitiger Unterstützung der Interpretierbarkeit, verwendet werden, erhalten wir eine informative und ansehnliche Grafik:
> qplot(x = long, y= lat, data = quakes, size = mag, col = -depth) + ggtitle("Ort der Erdbeben auf den Fidschi's:")+ xlab("Längengrad") + ylab("Breitengrad")

Zum Schluss dieser Übersicht speichern wir die Grafik als Datei:
Pas Paket ggplot bietet zahlreiche Funktionen zum Grafikdesign an, schauen Sie mal in die Hilfe! Alternativ ist das Buch zu ggplot zu empfehlen! Ebenso soll erwähnt werden, dass es einige Pakete gibt, die den Funktionsumfang von ggplot erweitern oder ggplot-Funktionen intern nutzen. Hier ist besonders auf Abhängigkeiten zu achten, da eine Weiterentwicklung von ggplot sich in eine vielleicht nicht gewünschte Form bemerkbar machen kann! Leider werden auch immer wieder Syntax-Konzepte verworfen!
|
|
|
Grafik
|
GrapheR
|
Das Paket GrapheR bietet eine Oberfläche um Daten grafisch darzustellen und bezüglich der Darstellung einzustellen. Darstellung bedeutet hier, dass Sie in der Lage sind, ohne Argumente die Sie mit dem gewohnten Funktionsaufruf übergeben müssen, die Form der Darstellung anpassen können! Sie können also über das Paket z. B. den Linientyp, Achseinstellungen, Legende, usw. wählen und direkt beurteilen. Ein Beispiel sagt mehr als tausend Worte! Starten Sie nach dem Laden des Paketes die Funktion run.GrapheR(), wird Ihnen die GrapheR-GUI angeboten:

Über das Menü lang können Sie Deutsch als GUI-Sprache einstellen und über Lden des Datensatzes können Sie Ihre Daten zur Darstellung laden. Dazu werden Ihnen verschiedene Optionen, wie z. B auch das Einladen von csv-Daten, angeboten. Informationen über den Datensatz gibt Ihnen die Möglichkeit, die grafisch darzustellenden Variablen zu prüfen:

Möchten beispielsweise die Beziehung zwischen Cases und Egg.Pr des vorliegenden Datensatzes prüfen, können Sie die im folgenden Bild gezeigte Funktionalität nutzen:

Über die Schaltfläche DRAW wird die Grafik mit den von Ihnen gewählten Einstellungen gezeichnet:
Sie können Änderungen vornehmen und nach dem erneuten Drücken der Schaltfläche DRAW wird die Grafik entsprechend aktualisiert. Die GrapheR-GUI bietet noch viele Möglichkeiten, betrachten Sie obige Ausführungen als Appetithappen!
Gefällt Ihnen die GrapheR-GUI können Sie sie mit dem Start der R-GUI in das R-Menü einbinden und so per Mausklick direkt ausführen. Ein Beispiel, wie das bewerkstelligen finden Sie hier!
|
|
|
Daten-management
|
dplyr
|
Das Paket dplyr bietet hilfreiche Funktionen zur Datenbearbeitung an. Die dplyr-Funktionen wurden aus Sicht des Anwenders entwickelt. Aus dieser Sicht, erscheint die Anwendung der Funktionen und deren möglichen Argumente einfacher. Hier finden Sie ein Einführungsvideo zum Paket und nachfolgend die Video-Anwendungsbeispiele in Textform auf Basis des mtcars-Datensatzes:
> data.frame(mtcars) mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 Merc 240D 24.4 4 146.7 62 ...
Obiger Beispieldatensatz wird oft verwendet, wie aber durch Fragen in diversen Foren ersichtlich, ist die Bedeutung der einzelnen Variablen nicht immer klar. Deswegen hier eine kurze Ergänzung der Legende:
mpg
|
Miles/(US) gallon
|
cyl
|
Number of cylinders
|
disp
|
Displacement (cu.in.) Hubraum
|
hp
|
Gross horsepower brutto SAE-PS
|
drat
|
Rear axle ratio Übersetzungsverhältnis
|
wt
|
Weight (1000 lbs)
|
qsec
|
1/4 mile time Beschleunigungszeit um 1/4 Meile zu erreichen
|
vs
|
V/S V-Motor oder Reihenmotor
|
am
|
Transmission (0 = automatic, 1 = manual)
|
gear
|
Number of forward gears
|
carb
|
Number of carburetors Anzahl Vergaser
|
Um die dplyr-Funktion nutzen zu können, muss eine dplyr-Tabelle über die Funktion tbl_df() angelegt werden.
> carData <- tbl_df(mtcars) > carData Source: local data frame [32 x 11]
mpg cyl disp hp drat wt qsec vs am gear carb (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 10 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 .. ... ... ... ... ... ... ... ... ... ... ...
Auffällig ist, dass das Beobachtungsobjekt in dieser Tabellenform nicht mehr angezeigt wird (Mazda RX4 = 1). Erfreulich ist, dass das Variablenformat (mpg = dbl) angezeigt wird. Steigen wir mit der ersten dplyr-Funktion ein und lassen uns die Beobachtungen der Größe aufsteigen nach carb und dann nach cyl auf dem Bildschirm ausgeben (Sortieren). Das erreichen wir über die Funktion arrange(carData, carb, cyl):
> arrange(carData, carb, cyl) Source: local data frame [32 x 11]
mpg cyl disp hp drat wt qsec vs am gear carb (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 2 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 3 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 4 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 5 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 6 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 7 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 8 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 9 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 10 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 .. ... ... ... ... ... ... ... ... ... ... …
Die Reihenfolge der Sortier-Argumente legt die Sortierreihenfolge fest. Eine absteigende Sortierreihenfolge wird durch ein “-”-Zeichen vor dem Sortier-Argument festgelegt (z. B. -cyl).
Die Bildung von Subsets (Untermengen) aufgrund von Merkmalsausprägungen wird im dplyr-Umfeld filtern genannt:
> cyl4 <- filter(carData, cyl == 4) > cyl4
Source: local data frame [11 x 11]
mpg cyl disp hp drat wt qsec vs am gear carb (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 1 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 3 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 4 32.4 4 78.7 ... ... ... ... ... ... ... ... 5 ... ...
Elegant ist die Bildung von Subsets über logische Verknüpfungen:
> cyl4 <- filter(carData, cyl == 4, gear == 5) > cyl4
Source: local data frame [2 x 11]
mpg cyl disp hp drat wt qsec vs am gear carb (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) 1 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2 2 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
Einzelne Variablen (Spalten) des Datensatzes (der Tabelle) können über die Funktion select() selektiert werden:
> Auswahl <- select(carData, mpg, wt, cyl) > Auswahl
Source: local data frame [32 x 3]
mpg wt cyl (dbl) (dbl) (dbl) 1 21.0 2.620 6 2 21.0 2.875 6 3 22.8 2.320 4 4 21.4 3.215 6 5 18.7 3.440 8 .. ... ... ...
Werden Merkmale mit einem Minus versehen, z. B. -wt, wird wt von der Selektion ausgeschlossen! Die Funktion select bietet noch eine Reihe sehr nützlicher Funktionsargumente an, siehe ?select.
Auch lassen sich in dem Datensatz elegant neue Variablen (Spalten) einfügen. Dazu dient die Funktion mutate. Die Spalten type (beobachtetes Objekt) und pwr2wt (als berechnete Merkmalsausprägung) werden über mutate() eingefügt:
> NSp_carData <- mutate(carData, type = rownames(mtcars), pwr2wt = hp/wt) > NSp_carData
Source: local data frame [32 x 13]
mpg cyl disp hp drat wt qsec vs am gear carb type pwr2wt (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (chr) (dbl) 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 41.98473 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag 38.26087 3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 Datsun 710 40.08621 4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Hornet 4 Drive 34.21462 .. ... ... ... ... ... ... ... ... ... ... ... ... ...
Spalten können gelöscht werden, indem ihnen der Wert NULL zugewiesen wird:
> NSp_carData <- mutate(carData, type = rownames(mtcars), pwr2wt = NULL) > NSp_carData
Source: local data frame [32 x 12]
mpg cyl disp hp drat wt qsec vs am gear carb type (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (chr) 1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Mazda RX4 Wag .. ... ... ... ... ... ... ... ... ... ... ... ...
Um Tabellen zu vereinigen, werden join-Funktionen angeboten. Um einen vollständigen Überblick über die join-Funktion zu bekommen, siehe ?join. Hier ein Beispiel, um Tabelleninhalte über eine Datensatz-ID mit semi_join() zusammenzuführen:
> Daten_1 <- data.frame(ID = c(1, 2, 3), Groesse = c(178, 170, 185)) > Daten_2 <- data.frame(ID = c(1, 2, 3), Gewicht = c(75, 80, 100)) > Daten_1 ID Groesse 1 1 178 2 2 170 3 3 185 > Daten_2 ID Gewicht 1 1 75 2 2 80 3 3 100 > # Über die ID werden beide Tabellen mit semi_join zusammengeführt: > semi_join(Daten_1, Daten_2, by = "ID") ID Groesse 1 1 178 2 2 170 3 3 185
Es wird auf die Daten mit gleicher ID verwiesen. ID = 1 verweist auf 178 in Daten_1 und auf 75 in Daten_2.
Daten mit gleicher ID in einer Tabelle mit inner_join() zusammenführen:
> Daten_3 <- inner_join(Daten_1, Daten_2, by = "ID") > Daten_3 ID Groesse Gewicht 1 1 178 75 2 2 170 80 3 3 185 100
Als letztes Beispiel zu den dplyr-Funktionalitäten wird die Parameterschätzung , Mittelwert- und Median-Schätzung, über die summarize()-Funktion gezeigt:
> summarize(carData, min(mpg), median(mpg), mean(mpg), max(mpg)) Source: local data frame [1 x 4]
min(mpg) median(mpg) mean(mpg) max(mpg) (dbl) (dbl) (dbl) (dbl) 1 10.4 19.2 20.09062 33.9
Das dplyr-Paket bietet noch weitere zahlreiche und hilfreiche Funktionen an. Empfehlen möchte ich natürlich die R-Hilfe zum Paket und das hier erwähnte Buch.
|
|
|
Daten- management
|
data.table
|
Das data.table-Paket ist ein "altes" und der R-Gemeinde etabliertes Paket zur Datenbearbeitung. Das Paket wurde designt, um große Datenmengen schnell und effektiv zu bearbeiten. Als Beispieldaten dient die Datei flights14.csv (zip-Datei, ca. 5 MB) die über 250 Tausend Zeilen mit Fluginformationen der New Yorker Flughäfen beinhaltet. Die folgenden Beispiele zeigen die Möglichkeiten des data.table-Pakets. Es wird davon ausgegangen, dass das Paket in die R-Umgebung geladen wurde.
Noch ein Hinweis: Hier finden Sie die folgende Beschreibung auch als Video!
Mit der Funktion fread() wird die Datei flights14.csv in die R-Umgebung geladen
> Flugdaten <- fread("flights14.csv") > str(Flugdaten) Classes ‘data.table’ and 'data.frame': 253316 obs. of 17 variables: $ year : int 2014 2014 2014 2014 2014 2014 2014 2014 2014 2014 ... $ 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 914 1157 1902 722 1347 1824 2133 1542 1509 1848 ... $ dep_delay: int 14 -3 2 -8 2 4 -2 -3 -1 -2 ... $ arr_time : int 1238 1523 2224 1014 1706 2145 37 1906 1828 2206 ... $ arr_delay: int 13 13 9 -26 1 0 -18 -14 -17 -14 ... $ cancelled: int 0 0 0 0 0 0 0 0 0 0 ... $ carrier : chr "AA" "AA" "AA" "AA" ... $ tailnum : chr "N338AA" "N335AA" "N327AA" "N3EHAA" ... $ flight : int 1 3 21 29 117 119 185 133 145 235 ... $ origin : chr "JFK" "JFK" "JFK" "LGA" ... $ dest : chr "LAX" "LAX" "LAX" "PBI" ... $ air_time : int 359 363 351 157 350 339 338 356 161 349 ... $ distance : int 2475 2475 2475 1035 2475 2454 2475 2475 1089 2422 ... $ hour : int 9 11 19 7 13 18 21 15 15 18 ... $ min : int 14 57 2 22 47 24 33 42 9 48 ... - attr(*, ".internal.selfref")=<externalptr>
Flugdaten beinhaltet die eingelesenen Daten und ist ein Objekt der Klasse data.table. Diese Datenobjekt ist notwendig, um die data.table- Funktionalitäten nutzen zu können. Über die Funktion data.table() kann direkt verwendet werden, um Datentabellen zu erzeugen:
> DT_mtcars <- data.table(mtcars) > str(DT_mtcars) Classes ‘data.table’ and 'data.frame': 32 obs. of 11 variables: $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : num 6 6 4 6 8 6 8 4 4 6 ... $ disp: num 160 160 108 258 360 ... $ hp : num 110 110 93 110 175 105 245 62 95 123 ... $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec: num 16.5 17 18.6 19.4 17 ... $ vs : num 0 0 1 1 0 1 0 1 1 1 ... $ am : num 1 1 1 0 0 0 0 0 0 0 ... $ gear: num 4 4 4 3 3 3 3 4 4 4 ... $ carb: num 4 4 1 1 2 1 4 2 2 4 ... - attr(*, ".internal.selfref")=<externalptr>
Über die Funktion tables() können Sie sich einen Überblick über die angelegten / vorhandenen data.table-Objekte (kurz Datentabellen) verschaffen:
> tables() NAME NROW NCOL MB COLS KEY [1,] DT_mtcars 32 11 1 mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb [2,] Flugdaten 253,316 17 21 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f Total: 22MB
Es werden die 2 angelegten Datentabellen inklusive der Anzahl Zeilen und Spalten wird auch die Größe der Tabellen ausgegeben. Es fehlt auch nicht die Angabe über den Speicherbedarf aller Datentabellen (hier 22 MB).
Geben Sie Flugdaten auf der R-Konsole ein, werden bei großen Datenmengen die ersten 5 und die letzten 5 Datenzeilen auf der Konsole ausgegeben:
> Flugdaten year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min 1: 2014 1 1 914 14 1238 13 0 AA N338AA 1 JFK LAX 359 2475 9 14 2: 2014 1 1 1157 -3 1523 13 0 AA N335AA 3 JFK LAX 363 2475 11 57 3: 2014 1 1 1902 2 2224 9 0 AA N327AA 21 JFK LAX 351 2475 19 2 4: 2014 1 1 722 -8 1014 -26 0 AA N3EHAA 29 LGA PBI 157 1035 7 22 5: 2014 1 1 1347 2 1706 1 0 AA N319AA 117 JFK LAX 350 2475 13 47 --- 253312: 2014 10 31 1459 1 1747 -30 0 UA N23708 1744 LGA IAH 201 1416 14 59 253313: 2014 10 31 854 -5 1147 -14 0 UA N33132 1758 EWR IAH 189 1400 8 54 253314: 2014 10 31 1102 -8 1311 16 0 MQ N827MQ 3591 LGA RDU 83 431 11 2 253315: 2014 10 31 1106 -4 1325 15 0 MQ N511MQ 3592 LGA DTW 75 502 11 6 253316: 2014 10 31 824 -5 1045 1 0 MQ N813MQ 3599 LGA SDF 110 659 8 24
Bei Datensätzen unter 100 Zeilen, wird der gesamte Datensatz auf der Konsole ausgegeben.
Zur Datenbearbeitung gehört natürlich dass durchführen von Abfragen möchten. Dazu bietet uns data.table das Key-Konzept an, dass Sie vielleicht aus dem Bereich der relationalen Datenbanken kennen. Bevor wir Abfragen nach dem Key-Konzept durchführen, hier noch einmal der klassische R- Weg: In dem folgenden Beispiel selektieren wir alle Daten des Luftfahrtunternehmens American Airlines (abgelegt in unter dem Merkmal carrier) und legen sie in dem neuen Objekt Flugdaten_AA ab:
> Flugdaten_AA <- Flugdaten[carrier == "AA"] > Flugdaten_AA year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min 1: 2014 1 1 914 14 1238 13 0 AA N338AA 1 JFK LAX 359 2475 9 14 2: 2014 1 1 1157 -3 1523 13 0 AA N335AA 3 JFK LAX 363 2475 11 57 3: 2014 1 1 1902 2 2224 9 0 AA N327AA 21 JFK LAX 351 2475 19 2 4: 2014 1 1 722 -8 1014 -26 0 AA N3EHAA 29 LGA PBI 157 1035 7 22 5: 2014 1 1 1347 2 1706 1 0 AA N319AA 117 JFK LAX 350 2475 13 47 --- 26298: 2014 10 31 1913 -2 2212 -16 0 AA N3LFAA 2455 LGA MIA 156 1096 19 13 26299: 2014 10 31 1636 -4 1914 -16 0 AA N4XGAA 2488 EWR DFW 192 1372 16 36 26300: 2014 10 31 656 -4 943 -7 0 AA N3DMAA 2493 JFK MCO 135 944 6 56 26301: 2014 10 31 1944 29 2232 4 0 AA N5FSAA 2387 JFK MIA 146 1089 19 44 26302: 2014 10 31 1539 -3 1708 -2 0 AA N3HAAA 1029 JFK DCA 51 213 15 39 > tables() NAME NROW NCOL MB COLS KEY [1,] DT_mtcars 32 11 1 mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb [2,] Flugdaten 253,316 17 22 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f [3,] Flugdaten_AA 26,302 17 3 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f Total: 26MB
Diese Art der Selektion kommt Ihnen bekannt vor. Durch die Vergabe eines Keys, eines Schlüssels, kann die Abfrage performanter und eleganter durchgeführt werden. Die Voraussetzung ist, dass vorher für die Spalte (das Merkmal) carrier ein Schlüssel über die Funktion setkey() vergeben wird:
> setkey(Flugdaten, carrier)
Die Selektion führen wir jetzt über diesen Key - wie angedeutet - eleganter durch:
> Flugdaten_AA <- Flugdaten["AA"] > Flugdaten_AA year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min 1: 2014 1 1 914 14 1238 13 0 AA N338AA 1 JFK LAX 359 2475 9 14 2: 2014 1 1 1157 -3 1523 13 0 AA N335AA 3 JFK LAX 363 2475 11 57 3: 2014 1 1 1902 2 2224 9 0 AA N327AA 21 JFK LAX 351 2475 19 2 4: 2014 1 1 722 -8 1014 -26 0 AA N3EHAA 29 LGA PBI 157 1035 7 22 5: 2014 1 1 1347 2 1706 1 0 AA N319AA 117 JFK LAX 350 2475 13 47 --- 26298: 2014 10 31 1913 -2 2212 -16 0 AA N3LFAA 2455 LGA MIA 156 1096 19 13 26299: 2014 10 31 1636 -4 1914 -16 0 AA N4XGAA 2488 EWR DFW 192 1372 16 36 26300: 2014 10 31 656 -4 943 -7 0 AA N3DMAA 2493 JFK MCO 135 944 6 56 26301: 2014 10 31 1944 29 2232 4 0 AA N5FSAA 2387 JFK MIA 146 1089 19 44 26302: 2014 10 31 1539 -3 1708 -2 0 AA N3HAAA 1029 JFK DCA 51 213 15 39
Die Funktion tables() zeigt nun auch die Verwendung eines Schlüssels an (gelbe Markierung):
> tables() NAME NROW NCOL MB COLS KEY [1,] DT_mtcars 32 11 1 mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb [2,] Flugdaten 253,316 17 21 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier [3,] Flugdaten_AA 26,302 17 3 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier Total: 25MB
Es können mehrere Schlüssel pro Tabelle vergeben werden, z. B. für das Luftfahrtunternehmen (carrier) und den Abflugflughafen (origin):
> setkey(Flugdaten, carrier, origin) > tables() NAME NROW NCOL MB COLS KEY [1,] DT_mtcars 32 11 1 mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb [2,] Flugdaten 253,316 17 21 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin [3,] Flugdaten_AA 26,302 17 3 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier Total: 25MB
Möchten Sie prüfen welche Schlüssel für eine bestimmte Tabelle angelegt wurden, hilft die Funktion key(Datentabelle) weiter:
Abfragen können klassisch über das data.table-Objekt Flugdaten wie folgt durchgeführt werden…
> Flugdaten[carrier == "VX" & origin == "JFK"] year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min 1: 2014 1 1 730 0 1056 -14 0 VX N361VA 11 JFK SFO 364 2586 7 30 2: 2014 1 1 1030 -5 1417 12 0 VX N628VA 23 JFK SFO 385 2586 10 30 3: 2014 1 1 957 12 1306 31 0 VX N842VA 251 JFK LAS 344 2248 9 57 4: 2014 1 1 1631 1 2008 -2 0 VX N854VA 27 JFK SFO 374 2586 16 31 5: 2014 1 1 1859 4 2239 4 0 VX N623VA 29 JFK SFO 371 2586 18 59 --- 3134: 2014 10 31 714 14 1010 -5 0 VX N636VA 399 JFK LAX 326 2475 7 14 3135: 2014 10 31 913 -7 1153 -42 0 VX N634VA 407 JFK LAX 318 2475 9 13 3136: 2014 10 31 1259 -1 1548 -22 0 VX N625VA 411 JFK LAX 330 2475 12 59 3137: 2014 10 31 1655 0 1949 -26 0 VX N843VA 413 JFK LAX 327 2475 16 55 3138: 2014 10 31 2001 -4 2311 -9 0 VX N624VA 415 JFK LAX 327 2475 20 1
… oder über die Verwendung der Schlüssel. Auf Basis der Schlüssel ist es über die J(oin)-Funktion nur noch notwendig, die Fluggesellschaft "VX" und den Abflugflughafen "JFK" anzugeben:
> Flugdaten[J("VX", "JFK")] year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min 1: 2014 1 1 730 0 1056 -14 0 VX N361VA 11 JFK SFO 364 2586 7 30 2: 2014 1 1 1030 -5 1417 12 0 VX N628VA 23 JFK SFO 385 2586 10 30 3: 2014 1 1 957 12 1306 31 0 VX N842VA 251 JFK LAS 344 2248 9 57 4: 2014 1 1 1631 1 2008 -2 0 VX N854VA 27 JFK SFO 374 2586 16 31 5: 2014 1 1 1859 4 2239 4 0 VX N623VA 29 JFK SFO 371 2586 18 59 --- 3134: 2014 10 31 714 14 1010 -5 0 VX N636VA 399 JFK LAX 326 2475 7 14 3135: 2014 10 31 913 -7 1153 -42 0 VX N634VA 407 JFK LAX 318 2475 9 13 3136: 2014 10 31 1259 -1 1548 -22 0 VX N625VA 411 JFK LAX 330 2475 12 59 3137: 2014 10 31 1655 0 1949 -26 0 VX N843VA 413 JFK LAX 327 2475 16 55 3138: 2014 10 31 2001 -4 2311 -9 0 VX N624VA 415 JFK LAX 327 2475 20 1
Abfragen nach dem Key-Konzept lassen sich auch auf numerische Werte ausbauen. Um ein Beispiel zu konstruieren, nehmen wir die Variable air_time als Key hinzu:
> setkey(Flugdaten, carrier, origin, air_time)
Wir wollen neben Fluggesellschaft, Abflugflughafen die Flugzeit (air_time) auf 318 bis 320 Minuten begrenzt selektieren. Die Flugzeit wird als Vektor an die Join-Funktion übergeben:
> Flugdaten[J("VX", "JFK", c(318, 320))] year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min 1: 2014 1 21 937 2 1237 2 0 VX N837VA 251 JFK LAS 318 2248 9 37 2: 2014 2 12 939 4 1220 -15 0 VX N837VA 251 JFK LAS 318 2248 9 39 3: 2014 3 19 926 -9 1205 -20 0 VX N835VA 251 JFK LAS 318 2248 9 26 4: 2014 3 29 934 -1 1214 -11 0 VX N846VA 251 JFK LAS 318 2248 9 34 5: 2014 4 20 656 -4 935 -40 0 VX N633VA 399 JFK LAX 318 2475 6 56 --- 99: 2014 10 11 1639 9 1946 -4 0 VX N629VA 413 JFK LAX 320 2475 16 39 100: 2014 10 15 924 -6 1231 -14 0 VX N627VA 407 JFK LAX 320 2475 9 24 101: 2014 10 20 705 5 958 -17 0 VX N633VA 399 JFK LAX 320 2475 7 5 102: 2014 10 20 1131 1 1413 -22 0 VX N841VA 409 JFK LAX 320 2475 11 31 103: 2014 10 23 1629 -1 1927 -23 0 VX N840VA 413 JFK LAX 320 2475 16 29
Über das by-Argument können Gruppierungen für Merkmale durchgeführt werden. Möchten Sie z. B. wissen, wie hoch die gesamte Verspätungszeit für die einzelnen Fluggesellschaften ist, lässt sich das sehr schnell und bequem über die Funktion sum() in Verbindung mit dem by-Argument ermitteln:
> Flugdaten[,sum(arr_delay), by = carrier] carrier V1 1: AA 143703 2: AS -2232 3: B6 452906 4: DL 214887 5: EV 526465 6: F9 12586 7: FL 17105 8: HA 3237 9: MQ 176232 10: OO 2965 11: UA 349988 12: US 16746 13: VX 15591 14: WN 133511
Die Variable arr_delay beinhaltet die Verspätungszeit für den Abflug und die Variable carrier steht für die Fluggesellschaft. V1 beinhaltet die summierte Verspätungszeit für die zugeordnete Fluggesellschaft. Natürlich lassen sich Gruppierungen für mehrere Merkmale durchführen:
> Flugdaten[, list(SummeVerspäteterAbflug = sum(arr_delay),MWVerspäteterAbflug = mean(arr_delay)), by = carrier] carrier SummeVerspäteterAbflug MWVerspäteterAbflug 1: AA 143703 5.4635769 2: AS -2232 -3.8885017 3: B6 452906 10.1824681 4: DL 214887 5.1552671 5: EV 526465 13.2214521 6: F9 12586 26.6088795 7: FL 17105 13.6730616 8: HA 3237 12.4500000 9: MQ 176232 9.4957702 10: OO 2965 14.8250000 11: UA 349988 7.5645276 12: US 16746 0.9997612 13: VX 15591 3.2501563 14: WN 133511 11.2175265
Fügen wir jetzt noch das Argument .N ein werden die Zeilen pro Fluggesellschaft gezählt und ausgegeben:
> Flugdaten[, list(SummeVerspäteterAbflug = sum(arr_delay),MWVerspäteterAbflug = mean(arr_delay), .N), by = carrier] carrier SummeVerspäteterAbflug MWVerspäteterAbflug N 1: AA 143703 5.4635769 26302 2: AS -2232 -3.8885017 574 3: B6 452906 10.1824681 44479 4: DL 214887 5.1552671 41683 5: EV 526465 13.2214521 39819 6: F9 12586 26.6088795 473 7: FL 17105 13.6730616 1251 8: HA 3237 12.4500000 260 9: MQ 176232 9.4957702 18559 10: OO 2965 14.8250000 200 11: UA 349988 7.5645276 46267 12: US 16746 0.9997612 16750 13: VX 15591 3.2501563 4797 14: WN 133511 11.2175265 11902
Das Paket data.table bietet Funktionen zur Erweiterung der Datentabellen an. Um ein Beispiel zu konstruieren, legen wir eine neue Datentabelle über die Merkmale carrier, origin und dest(ination) an:
> setkey(Flugdaten, carrier, origin, dest) > Daten_AA_EWR_MIA <- Flugdaten[J("AA", "EWR", "MIA")] > Daten_AA_EWR_MIA year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min 1: 2014 5 26 1105 -5 1335 -35 0 AA N3GSAA 1623 EWR MIA 130 1085 11 5 2: 2014 8 24 1921 -9 2156 -40 0 AA N3KHAA 1410 EWR MIA 130 1085 19 21 3: 2014 3 1 1127 -3 1413 -22 0 AA N3HBAA 1623 EWR MIA 132 1085 11 27 4: 2014 6 4 1114 4 1338 -32 0 AA N3KNAA 1623 EWR MIA 132 1085 11 14 5: 2014 5 31 1109 -1 1336 -34 0 AA N5ELAA 1623 EWR MIA 133 1085 11 9 --- 844: 2014 7 2 1117 7 1452 42 0 AA N3AKAA 1623 EWR MIA 187 1085 11 17 845: 2014 7 15 1107 -3 1444 34 0 AA N3KAAA 1623 EWR MIA 187 1085 11 7 846: 2014 1 6 1924 144 2313 173 0 AA N5DWAA 172 EWR MIA 192 1085 19 24 847: 2014 3 29 1736 7 2121 36 0 AA N635AA 1383 EWR MIA 199 1085 17 36 848: 2014 7 21 1100 -10 1538 88 0 AA N3EPAA 1623 EWR MIA 209 1085 11 0
Als Beispiel konstruieren wir einen Index aus der tatsächlichen Flugzeit und der mittleren Flugzeit, die in der Index-Berechnung über mean() geschätzt wird:
> Index <- Daten_AA_EWR_MIA[,air_time] / Daten_AA_EWR_MIA[,mean(air_time)]
Diesen berechneten Index können wir nun leicht über die Zuweisung := als zusätzliche Spalte in die Tabelle aufnehmen:
> Daten_AA_EWR_MIA[, AT_Index := Index] > Daten_AA_EWR_MIA year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min AT_Index 1: 2014 5 26 1105 -5 1335 -35 0 AA N3GSAA 1623 EWR MIA 130 1085 11 5 0.8591022 2: 2014 8 24 1921 -9 2156 -40 0 AA N3KHAA 1410 EWR MIA 130 1085 19 21 0.8591022 3: 2014 3 1 1127 -3 1413 -22 0 AA N3HBAA 1623 EWR MIA 132 1085 11 27 0.8723192 4: 2014 6 4 1114 4 1338 -32 0 AA N3KNAA 1623 EWR MIA 132 1085 11 14 0.8723192 5: 2014 5 31 1109 -1 1336 -34 0 AA N5ELAA 1623 EWR MIA 133 1085 11 9 0.8789277 --- 844: 2014 7 2 1117 7 1452 42 0 AA N3AKAA 1623 EWR MIA 187 1085 11 17 1.2357855 845: 2014 7 15 1107 -3 1444 34 0 AA N3KAAA 1623 EWR MIA 187 1085 11 7 1.2357855 846: 2014 1 6 1924 144 2313 173 0 AA N5DWAA 172 EWR MIA 192 1085 19 24 1.2688279 847: 2014 3 29 1736 7 2121 36 0 AA N635AA 1383 EWR MIA 199 1085 17 36 1.3150873 848: 2014 7 21 1100 -10 1538 88 0 AA N3EPAA 1623 EWR MIA 209 1085 11 0 1.3811721
Die Funktion tables() zeigt die zusätzliche Spalte AT_Index (als Summe, gelbe Markierung):
> tables() NAME NROW NCOL MB COLS KEY [1,] Daten_AA_EWR_MIA 848 18 1 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest [2,] DT_mtcars 32 11 1 mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb [3,] Flugdaten 253,316 17 21 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest [4,] Flugdaten_AA 26,302 17 3 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier Total: 26MB
Variablen können aus der Tabelle gelöscht werden. Dazu wird der Variable die Ausprägung NULL zugewiesen:
> Daten_AA_EWR_MIA[, AT_Index := NULL]
Auch können Daten an einer bestehenden Tabelle angehängt werden. Dazu bilden wir Subsets aus 2 Fluggesellschaften über die Variable carrier …
… und prüfen mit tables():
> > tables() NAME NROW NCOL MB COLS KEY [1,] Daten_AA_EWR_MIA 848 17 1 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest [2,] DT_mtcars 32 11 1 mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb [3,] Flugdaten 253,316 17 21 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest [4,] Flugdaten_AA 26,302 17 3 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest [5,] Flugdaten_MQ 18,559 17 2 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest Total: 28MB
Die Struktur der Tabellen Flugdaten_AA und Flugdaten_MQ sind identisch, was das Anfügen der Tabelle Flugdaten_MQ an Flugdaten_AA leicht macht. Dazu verwenden wir die data.table-Funktion rbindlist(), die performanter als die Basisfunktion rbind() ist:
> Flugdaten_AA_MQ <- rbindlist(list(Flugdaten_AA, Flugdaten_MQ), fill = TRUE) > Flugdaten_AA_MQ year month day dep_time dep_delay arr_time arr_delay cancelled carrier tailnum flight origin dest air_time distance hour min 1: 2014 7 11 1738 43 2000 15 0 AA N4WNAA 2488 EWR DFW 162 1372 17 38 2: 2014 7 12 916 -4 1137 -28 0 AA N566AA 1223 EWR DFW 165 1372 9 16 3: 2014 7 12 1653 -2 1926 -19 0 AA N470AA 2488 EWR DFW 165 1372 16 53 4: 2014 7 11 1838 -12 2118 -22 0 AA N564AA 1691 EWR DFW 167 1372 18 38 5: 2014 7 22 913 -7 1132 -33 0 AA N4YPAA 1223 EWR DFW 167 1372 9 13 --- 44857: 2014 2 17 1544 4 1846 36 0 MQ N532MQ 3553 LGA XNA 195 1147 15 44 44858: 2014 2 10 659 -6 945 15 0 MQ N543MQ 3547 LGA XNA 196 1147 6 59 44859: 2014 2 2 1510 0 1748 13 0 MQ N505MQ 3553 LGA XNA 198 1147 15 10 44860: 2014 1 2 718 3 1015 35 0 MQ N530MQ 3547 LGA XNA 199 1147 7 18 44861: 2014 10 21 805 96 1120 161 0 MQ N521MQ 3547 LGA XNA 224 1147 8 5
Das Argument fill = TRUE wäre in diesem Beispiel nicht nötig, es ist eine Handlungsanweisung, das fehlende Werte mit NA aufgefüllt werden. Wir prüfen wieder mit tables():
> tables() NAME NROW NCOL MB COLS KEY [1,] Daten_AA_EWR_MIA 848 17 1 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest [2,] DT_mtcars 32 11 1 mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb [3,] Flugdaten 253,316 17 21 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest [4,] Flugdaten_AA 26,302 17 3 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest [5,] Flugdaten_AA_MQ 44,861 17 4 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f [6,] Flugdaten_MQ 18,559 17 2 year,month,day,dep_time,dep_delay,arr_time,arr_delay,cancelled,carrier,tailnum,f carrier,origin,dest Total: 32MB
Zum Ende sei auch erwähnt, dass die Funktion merge() in einer optimierten Form angeboten wird. Hier wird aber auf die Hilfe verwiesen!
|
|
|
Daten-management
|
Formattable
|
Besteht die Notwendigkeit eine Datentabelle im HTML-Format zu erzeugen und auszugeben, sind die Funktionalitäten des formattable-Paketes hilfreich. Dieses Paket beinhaltetet zahlreiche Möglichkeiten der Formatierung, auch formelbasiert. Hier ein kleines Beispiel auf Basis des Datensatzes mtcars:
> formattable(mtcars, list(mpg = formatter("span", + style = x ~ style(display = "block", + "border-radius" = "4px", + "padding-right" = "4px", + color = "white", + "background-color" = rgb(0, x/max(x), 0)))))
Obige Abbildung ist nur ein Auszug der Darstellung im Explorer. Über die Funktion formattable werden HTML- und CSS-Objekte erzeugt und vom Explorer interpretiert. Zur optimalen Nutzung wird natürlich die Pakethilfe empfohlen. Über den Explorer wird auch angezeigt, wo erzeugte der HTML-Code gespeichert wird. Diesen Code können dann natürlich wiederverwendet werden.
|
|
|
Externe Daten
|
RODBC
|
Datenbankverknüpfungen über ODBC
Eine Beschreibung finden Sie hier...!
|
|
|
Externe Daten
|
XLConnect
|
Über Paket XLConnect können sehr flexibel EXCEL-Dateien eingelesen und geschrieben werden, ohne das MS Excel installiert sein muss! Sie können also Excel-Daten (Tabellen, Bereiche) in die R-Umgebung einlesen, bearbeiten und inklusive möglicher R-Grafiken in die entsprechende (oder einer neuen) Excel-Datei zurückschreiben. Eine Beschreibung der Schnittstelle finden Sie hier als PDF-Datei oder als animierte PowerPoint-Datei!
|
|
|
Anwender- oberfläche
|
rpanel
|
Dieses Paket stellt Ihnen Funktion zum Erstellen eigener Anwenderoberflächen (GUI) zur Verfügung. Damit sind Sie in der Lage, eine Oberfläche mit Schaltflächen und Auswahlmöglichkeiten zu erstellen und in Ihre Funktion zu integrieren. Damit können Sie dem Anwender die Anwendung einer vielleicht komplexen Funktion zu erleichtern.
Hier nur ein kurzes Beispiel:
|
|
|
Anwender- oberfläche
IDE (Integrated Development Environment = Integrierte Entwicklungs- umgebung
|
RStudio
|
RStudio ist eine integrierte Entwicklungsumgebung (IDE) zur R-Anwendung und Programmierung. RStudio ist ein Open-Source-Projekt und läuft unter den wesentlichen OS-Umgebungen wie Windows, Mac und Linux. An dieser Stelle finden Sie keine Anwendungsbeschreibung, sondern nur einen Muntermacher sich mit RStudio zu beschäftigen! Eine ausführliche Beschreibung finden Sie hier!
Die Installation von RStudio ist denkbar einfach! Laden Sie die aktuelle RStudio-Version auf Ihren Rechner und starten wie gewohnt die Installation. Während der Installation erkennt RStudio die installierte R-Version und integriert diese mit dem RStudio-Aufruf. D. h., Sie brauchen nichtsweiter zu tun, als RStudio zu installieren:
Integrierte Entwicklungsumgebung bedeutet, dass mit einem Klick R-Code aus dem rechten unteren Datei-Fenster in den integrierten Editor zur Bearbeitung bringen:
Die Konsolen-Funktionalität steht Ihnen im linken unteren Fenster zur Verfügung. Legen Sie ein Datenobjekt an, wird es Ihnen im oberen rechten Fenster (Workspace) angezeigt. Rufen Sie zu einer Funktion die Hilfe auf, wird sie im rechten unteren Fenster dargestellt:
Als Muntermacher soll es bis hier reichen...!
|
|
|
|