Kapitel 1. R-Grundlagen
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
In diesem Kapitel geht es um die Grundlagen: die Installation und Verwendung von Paketen und das Laden von Daten.
Für die meisten Rezepte in diesem Buch müssen die Pakete ggplot2, dplyr und gcookbook auf deinem Computer installiert sein. (Das gcookbook-Paket enthält die Datensätze, die in einigen der Beispiele verwendet werden, ist aber für die eigentliche Arbeit nicht notwendig.) Wenn du schnell loslegen willst, führe aus:
install.packages
(
"tidyverse"
)
install.packages
(
"gcookbook"
)
Dann kannst du in jeder R-Sitzung, bevor du die Beispiele in diesem Buch ausführst, mit laden:
library
(
tidyverse
)
library
(
gcookbook
)
Wenn du library(tidyverse)
aufrufst, werden ggplot2, dplyr und eine Reihe anderer Pakete geladen. Wenn du deine R-Sitzung schlanker halten und nur die Pakete laden möchtest, die du unbedingt brauchst, kannst du die Pakete ggplot2 und dplyr einzeln laden:
library
(
ggplot2
)
library
(
dplyr
)
library
(
gcookbook
)
Hinweis
Wenn du ein tieferes Verständnis für die Funktionsweise von ggplot2 haben möchtest, lies Anhang A, der die Konzepte hinter ggplot2 erklärt.
Pakete in R sind Sammlungen von Funktionen und/oder Daten, die zur einfachen Verteilung gebündelt werden. Die Installation eines Pakets erweitert die Funktionalität von R auf deinem Computer. Wenn ein R-Nutzer ein Paket erstellt und der Meinung ist, dass es für andere nützlich sein könnte, kann er es über ein Paket-Repository verbreiten. Das wichtigste Repository für die Verbreitung von R-Paketen heißt CRAN (Comprehensive R Archive Network), aber es gibt auch andere, wie z. B. Bioconductor, das sich auf Pakete für genomische Daten spezialisiert hat.
Wenn du viel Zeit damit verbracht hast, R zu lernen, hast du vielleicht schon vomtidyverse gehört. Dabei handelt es sich um eine Sammlung von R-Paketen, die gemeinsame Vorstellungen davon haben, wie Daten strukturiert und manipuliert werden sollten. Das Tidyverse ist eine Sammlung von R-Paketen, die gemeinsame Vorstellungen davon haben, wie Daten zu strukturieren und zu bearbeiten sind. DasTidyverse ist eine Sammlung von Zusatzpaketen für R, die viele Operationen zur Datenbearbeitung und -visualisierung erleichtern. In diesem Buch wird hauptsächlich Tidyverse verwendet, da ich der Meinung bin, dass es eine schnellere und einfachere (aber nicht weniger leistungsstarke!) Möglichkeit bietet, mit Daten zu arbeiten.
Wenn du noch nie mit tidyverse gearbeitet hast, solltest du vor allem ein Rezept lesen, das dir hilft, eine fremdartig aussehende Syntax zu verstehen: %>%
, auch bekannt als Pipe-Operator. Das ist Rezept 1.7 in diesem Kapitel.
1.1 Ein Paket installieren
Lösung
Verwende install.packages()
und gib den Namen des Pakets an, das du installieren möchtest. Um ggplot2 zu installieren, führe aus:
install.packages
(
"ggplot2"
)
An dieser Stelle wirst du möglicherweise aufgefordert, einen Download-Mirror auszuwählen. In der Regel ist es am besten, die erste Wahl, https://cloud.r-project.org/, zu verwenden, da es sich um einen Cloud-basierten Mirror mit Endpunkten auf der ganzen Welt handelt.
Diskussion
Wenn du mehrere Pakete auf einmal installieren willst, kannst du einen Vektor von Paketnamen übergeben. So werden zum Beispiel die meisten der in diesem Buch verwendeten Pakete installiert:
install.packages
(
c
(
"tidyverse"
,
"gcookbook"
))
Wenn du R anweist, ein Paket zu installieren, installiert es automatisch alle anderen Pakete, von denen das erste Paket abhängt.
1.2 Ein Paket laden
Lösung
Verwende library()
und gib den Namen des Pakets an, das du installieren möchtest. Um ggplot2 zu laden, führe aus:
library
(
ggplot2
)
Das Paket muss bereits auf dem Computer installiert sein.
Diskussion
Bei den meisten Rezepten in diesem Buch muss vor der Ausführung des Codes ein Paket geladen werden, entweder für die Grafikfunktionen (wie im ggplot2-Paket) oder für Beispieldatensätze (wie in den Paketen MASS und gcookbook).
Eine der Eigenheiten von R ist die Terminologie "Paket/Bibliothek". Obwohl du die Funktion library()
verwendest, um ein Paket zu laden, ist ein Paket keine Bibliothek, und einige langjährige R-Nutzer werden wütend, wenn du es so nennst.
Eine Bibliothek ist ein Verzeichnis, das eine Reihe von Paketen enthält. Du könntest z. B. eine systemweite Bibliothek und eine Bibliothek für jeden Benutzer haben.
1.3 Pakete upgraden
Lösung
Führe update.packages()
aus:
update.packages
()
Es wird dich nach jedem Paket fragen, das aktualisiert werden kann. Wenn du möchtest, dass alle Pakete ohne Nachfrage aktualisiert werden, verwende ask = FALSE
:
update.packages
(
ask
=
FALSE
)
Diskussion
Im Laufe der Zeit werden die Paketautoren neue Versionen der Pakete mit Fehlerkorrekturen und neuen Funktionen veröffentlichen, und es ist in der Regel eine gute Idee, auf dem neuesten Stand zu bleiben. Bedenke jedoch, dass neue Versionen von Paketen manchmal Fehler enthalten oder ein leicht verändertes Verhalten aufweisen.
1.4 Laden einer durch Trennzeichen getrennten Textdatei
Lösung
Die gebräuchlichste Art, eine Datei einzulesen, ist die Verwendung von kommagetrennten Werten (CSV-Daten):
data
<-
read.csv
(
"datafile.csv"
)
Alternativ zu kannst du auch die Funktion read_csv()
(beachte den Unterstrich statt des Punktes) aus dem readr-Paket verwenden. Diese Funktion ist deutlich schneller als read.csv()
und kann Zeichenketten sowie Datum und Uhrzeit besser verarbeiten.
Diskussion
Da Datendateien viele verschiedene Formate haben, gibt es viele Möglichkeiten, sie zu laden. Zum Beispiel, wenn die Datendatei keine Kopfzeilen in der ersten Zeile hat:
data
<-
read.csv
(
"datafile.csv"
,
header
=
FALSE
)
Der resultierende Datenrahmen wird Spalten mit den Namen V1
, V2
und so weiter haben, die du wahrscheinlich manuell umbenennen möchtest:
# Manually assign the header names
names
(
data
)
<-
c
(
"Column1"
,
"Column2"
,
"Column3"
)
Du kannst das Trennzeichen mit sep
festlegen. Wenn es durch Leerzeichen getrennt ist, verwendesep = " "
. Wenn sie durch Tabulatoren getrennt ist, verwende \t
:
data
<-
read.csv
(
"datafile.csv"
,
sep
=
"\t"
)
Standardmäßig werden die Strings in den Daten als Faktoren behandelt. Angenommen, dies ist deine Datendatei und du liest sie mit read.csv()
ein:
"First","Last","Sex","Number" "Currer","Bell","F",2 "Dr.","Seuss","M",49 "","Student",NA,21
Im resultierenden Datenrahmen werden First
und Last
als Faktoren gespeichert, obwohl es in diesem Fall sinnvoller ist, sie als Zeichenketten (oderZeichenvektoren in der R-Terminologie) zu behandeln. Um dies zu unterscheiden, verwendestringsAsFactors = FALSE
. Wenn es weitere Spalten gibt, die als Faktoren behandelt werden sollen, kannst du sie einzeln umwandeln:
data
<-
read.csv
(
"datafile.csv"
,
stringsAsFactors
=
FALSE
)
# Convert to factor
data
$
Sex
<-
factor
(
data
$
Sex
)
str
(
data
)
#> 'data.frame': 3 obs. of 4 variables:
#> $ First : chr "Currer" "Dr." ""
#> $ Last : chr "Bell" "Seuss" "Student"
#> $ Sex : Factor w/ 2 levels "F","M": 1 2 NA
#> $ Number: int 2 49 21
Alternativ kannst du die Datei auch mit Strings als Faktoren laden und dann einzelne Spalten von Faktoren in Zeichen umwandeln.
1.5 Daten aus einer Excel-Datei laden
Diskussion
Mit read_excel()
kannst du von anderen Blättern laden, indem du eine Nummer oder einen Namen für sheet
angibst:
data
<-
read_excel
(
"datafile.xls"
,
sheet
=
2
)
data
<-
read_excel
(
"datafile.xls"
,
sheet
=
"Revenues"
)
read_excel()
verwendet die erste Zeile des Arbeitsblatts für die Spaltennamen. Wenn du diese Zeile nicht für die Spaltennamen verwenden willst, benutzecol_names = FALSE
. Die Spalten heißen dann X1
, X2
, und so weiter.
Standardmäßig leitet read_excel()
den Typ jeder Spalte ab, aber wenn du den Typ jeder Spalte angeben möchtest, kannst du das Argument col_types
verwenden. Du kannst auch Spalten auslassen, wenn du den Typ als"blank"
angibst:
# Drop the first column, and specify the types of the next three columns
data
<-
read_excel
(
"datafile.xls"
,
col_types
=
c
(
"blank"
,
"text"
,
"date"
,
"numeric"
))
Siehe auch
Unter ?read_excel
findest du weitere Optionen, um das Lesen dieser Dateien zu kontrollieren.
Es gibt noch andere Pakete zum Einlesen von Excel-Dateien. Das gdata-Paket hat eine Funktion read.xls()
zum Einlesen von .xls-Dateien, und das xlsx-Paket hat eine Funktion read.xlsx()
zum Einlesen von .xlsx-Dateien. Dazu muss eine externe Software auf deinem Computer installiert sein: read.xls()
Das Paket gdata benötigt Java und read.xlsx()
benötigt Perl.
1.6 Laden von Daten aus SPSS/SAS/Stata-Dateien
Diskussion
Das haven-Paket enthält auch Funktionen zum Lesen von anderen Formaten:
-
read_sas()
: SAS -
read_dta()
: Stata
Eine Alternative zu haven ist das Paket foreign. Es unterstützt auch SPSS- und Stata-Dateien, ist aber nicht so aktuell wie die Funktionen von haven. Es unterstützt zum Beispiel nur Stata-Dateien bis zur Version 12, während haven bis zur Version 14 (die aktuelle Version zum Zeitpunkt dieses Artikels) unterstützt.
Das Auslandspaket unterstützt auch einige andere Formate, darunter:
-
read.octave()
: Octave und MATLAB -
read.systat()
: SYSTAT -
read.xport()
: SAS XPORT -
read.dta()
: Stata -
read.spss()
: SPSS
1.7 Funktionen miteinander verknüpfen Zusammen mit %>%, dem Pipe-Operator
Lösung
Verwende %>%
, den Pipe-Operator. Zum Beispiel:
library
(
dplyr
)
# The pipe is provided by dplyr
morley
# Look at the morley data set
#> Expt Run Speed
#> 001 1 1 850
#> 002 1 2 740
#> 003 1 3 900
#> ...<94 more rows>...
#> 098 5 18 800
#> 099 5 19 810
#> 100 5 20 870
morley
%>%
filter
(
Expt
==
1
)
%>%
summary
()
#> Expt Run Speed
#> Min. :1 Min. : 1.00 Min. : 650
#> 1st Qu.:1 1st Qu.: 5.75 1st Qu.: 850
#> Median :1 Median :10.50 Median : 940
#> Mean :1 Mean :10.50 Mean : 909
#> 3rd Qu.:1 3rd Qu.:15.25 3rd Qu.: 980
#> Max. :1 Max. :20.00 Max. :1070
Diese Funktion nimmt den Datensatz morley
und übergibt ihn an die Funktion filter()
von dplyr, wobei nur die Datenzeilen beibehalten werden, bei denen Expt
gleich 1 ist. Dann wird das Ergebnis an die Funktion summary()
übergeben, die einige zusammenfassende Statistiken zu den Daten berechnet.
Ohne den Pipe-Operator würde der vorangehende Code wie folgt aussehen:
summary
(
filter
(
morley
,
Expt
==
1
))
In diesem Code werden die Funktionsaufrufe von innen nach außen abgearbeitet. Aus mathematischer Sicht macht das durchaus Sinn, aber aus Sicht der Lesbarkeit kann das verwirrend und schwer zu lesen sein, besonders wenn es viele verschachtelte Funktionsaufrufe gibt.
Diskussion
Dieses Muster mit dem %>%
Operator wird häufig bei Tidyverse-Paketen verwendet, weil sie viele Funktionen enthalten, die relativ kleine Aufgaben erfüllen. Die Idee ist, dass diese Funktionen Bausteine sind, die es den Nutzern ermöglichen, die Funktionsaufrufe so zusammenzustellen, dass sie das gewünschte Ergebnis liefern.
Um zu verdeutlichen, was hier vor sich geht, hier ein einfacheres Beispiel mit zwei gleichwertigen Codeabschnitten:
f
(
x
)
# Equivalent to:
x
%>%
f
()
Der Pipe-Operator nimmt im Wesentlichen das, was links steht, und setzt es als erstes Argument des Funktionsaufrufs rechts ein.
Sie kann für mehrere Funktionsaufrufe in einer Kette verwendet werden:
h
(
g
(
f
(
x
)))
# Equivalent to:
x
%>%
f
()
%>%
g
()
%>%
h
()
In einer Funktionskette ist die lexikalische Reihenfolge der Funktionsaufrufe dieselbe wie die Reihenfolge, in der sie berechnet werden.
Wenn du das Endergebnis speichern willst, kannst du den <-
Operator am Anfang verwenden. Dadurch wird zum Beispiel die ursprüngliche x
durch das Ergebnis der Funktionskette ersetzt:
x
<-
x
%>%
f
()
%>%
g
()
%>%
h
()
Wenn es zusätzliche Argumente für die Funktionsaufrufe gibt, werden sie nach rechts verschoben, wenn der Pipe-Operator verwendet wird. Wenn wir auf den Code aus dem ersten Beispiel zurückkommen, sind diese beiden gleichwertig:
filter
(
morley
,
Expt
==
1
)
morley
%>%
filter
(
Expt
==
1
)
Der Pipe-Operator stammt eigentlich aus dem Paket magrittr, aber dplyr importiert ihn und stellt ihn zur Verfügung, wenn du library(dplyr)
aufrufst.
Siehe auch
Viele weitere Beispiele für die Verwendung von %>%
bei der Datenmanipulation findest du inKapitel 15: .
Get R Graphics Cookbook, 2. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.