Lerne nützliche Funktionen zur Manipulation von Datenstrukturen, verschachtelten Listen, regulären Ausdrücken sowie zum Arbeiten mit Zeiten und Daten in der Programmiersprache R kennen.
In diesem Tutorial lernst du mehrere Funktionen und Helfer kennen, die in der Programmiersprache R einfach und häufig genutzt werden. Zuerst schauen wir uns einige mathematische Funktionen an. Danach widmest du dich Funktionen, die eng mit R-Datenstrukturen verknüpft sind: das Bearbeiten verschachtelter Listen, reguläre Ausdrücke sowie Arbeiten mit Zeit- und Datumswerten.
Mathematische Funktionen
Schau dir die folgenden Codezellen an, die mehrere mathematische Funktionen verwenden.
Zunächst definierst du zwei Vektoren, nämlich x und y, die sowohl positive als auch negative Werte enthalten.
Als Nächstes kommt die Funktion round(). Sie rundet die Eingabe. Über ein zusätzliches Argument gibst du an, auf wie viele Dezimalstellen gerundet werden soll. Standardmäßig rundet round() auf null Nachkommastellen.
Wendest du round() auf die Vektoren x und y an, sieht die Ausgabe wie folgt aus:
Die Funktion sum() berechnet die Summe der Elemente eines Vektors oder einer Matrix. Übergibst du zum Beispiel einen Zeilenvektor, erhältst du als Skalar die Summe aller Elemente zurück.
In unserem Fall werden die Vektoren x und y an sum() übergeben. R berechnet also jeweils die Summe der Vektorelemente und gibt einen Skalar aus.
Zum Schluss berechnet mean() den arithmetischen Mittelwert. Dabei werden die Zahlen addiert und durch die Anzahl der Werte geteilt.
Hier ist die Eingabe für mean() ein Zeilenvektor der Länge zwei mit den Zahlen 7 und 48. Der Mittelwert ist also die Summe der beiden Werte geteilt durch die Anzahl der Elemente, also 2.
Weiter geht’s mit dem nächsten, besonders spannenden Teil dieses Tutorials!
Funktionen für Datenstrukturen
Schauen wir uns nun einige Datenstrukturen wie Listen und Vektoren an. Du lernst verschiedene Möglichkeiten, mit der Datenstruktur list zu arbeiten, eine list umzukehren und wie du Listen in Vektoren und umgekehrt umwandelst.
Die folgende Funktion ist eine list() beziehungsweise eine Liste von Listen, auch verschachtelte Liste genannt. Sie erstellt eine Liste von Elementen, die logische Werte, numerische Werte und Zeichenketten enthalten kann.
Im folgenden Beispiel gibt es drei Listen innerhalb einer Liste: log, ch und int_vec. Jede davon hat einen Datentyp bzw. ein R-Objekt: logisch, numerisch oder Zeichen/String.
list_define <-list(log = TRUE, ch ="hello_datacamp", int_vec = sort(rep(seq(8,2, by =-2), times =2)))Bereitgestellt von
Gehen wir den obigen Ausdruck Schritt für Schritt durch.
Die Funktion seq erzeugt eine Zahlenfolge in absteigender Reihenfolge von 8 bis 2.
Die Syntax von seq() lautet: seq(x1,x2, by = y)
Die ersten beiden Argumente x1 und x2 geben den Bereich der Folge an, also wo sie beginnt und endet. Das Argument by legt die Schrittweite der Erhöhung oder Verringerung fest.
Zum Beispiel erzeugt die folgende Zeile eine Folge von 100 bis 200 in 20er-Schritten.
Sie wiederholt das Eingabeargument, üblicherweise einen Vektor oder eine Liste. Mit dem Argument times (eine ganze Zahl) gibst du an, wie oft die Eingabe wiederholt wird. rep erwartet zwei Argumente: die Eingabe und die gewünschte Anzahl an Wiederholungen.
Wendest du rep auf unser Beispiel (einen Vektor der Länge 4) an, erhältst du einen Ausgabeverktor der Länge 8.
Zuletzt noch die Funktion sort(). Sie ist eine generische, selbsterklärende Funktion zum Sortieren vieler Datenstrukturen wie Vektoren oder Listen. Sie funktioniert nicht nur für numerische Werte, sondern auch für logische Werte und Zeichen. Standardmäßig wird aufsteigend sortiert.
Gib die Ausgabe von rep an sort weiter, um das finale Ergebnis zu erhalten.
Einen Vektor in eine Liste umzuwandeln ist in R sehr einfach. Verwende as gefolgt von .list() und übergib den Vektor als Argument. Damit wandelst du den Vektor in eine Liste um.
Wandeln wir nun die große Liste list_define in einen Vektor um. Wichtig: Ein Vektor kann nur einen einzigen Datentyp enthalten. Daher werden sowohl logische als auch numerische Werte zu Zeichenketten konvertiert.
Bevor wir zum nächsten Thema übergehen, noch ein Blick auf append() und rev().
Wie der Name andeutet, fügt append() einen oder mehrere Vektoren bzw. Listen an einen bestehenden oder neuen Vektor/Liste an.
Probieren wir append() auf der Liste list_define aus. Du siehst, dass die Liste anschließend 6 statt 3 Elemente enthält, denn du hast sie mit sich selbst verknüpft.
List of 3$ int_vec: num [1:8]22446688$ ch : chr "hello_datacamp"$ log : logi TRUEBereitgestellt von
Reguläre Ausdrücke
Viele finden reguläre Ausdrücke zunächst kompliziert. Sie sind jedoch ein zentrales Thema – nicht nur in R, sondern auch in anderen Sprachen wie Python. Viele Programmiersprachen, darunter R, bringen eingebaute Regex-Funktionalität mit.
Reguläre Ausdrücke lassen sich in zahlreichen Anwendungen einsetzen und sind besonders nützlich, wenn du Textdaten vorverarbeiten möchtest. Sie kommen etwa in der Verarbeitung natürlicher Sprache (NLP) zum Einsatz.
Auch Suchmaschinen und Texteditoren nutzen sie.
Reguläre Ausdrücke, kurz regex oder regexp (auch rationale Operatoren genannt), sind Zeichenfolgen, die ein Suchmuster definieren. Diese Muster werden von verschiedenen String-Suchalgorithmen verwendet, um ein Muster zu finden, zu ersetzen oder passende Elemente zu filtern.
Starten wir mit den Funktionen grep() und grepl().
Der Einfachheit halber definieren wir einen Zeilenvektor animals_regex der Länge 5, auf dem du Regex-Muster anwenden wirst.
animals_regex <- c('cat','dog','cheetah','lion','mice')Bereitgestellt von
Zuerst zur Funktion grepl(). grepl() gibt ein logisches Ergebnis zurück: Stimmt die Zeichenkette mit dem Muster überein, kommt TRUE, sonst FALSE.
Die Syntax ist klar: Erstes Argument ist das gesuchte Muster, zweites Argument ist der Eingabe-String/Vektor, in dem gesucht werden soll. Die restlichen Argumente kannst du vorerst ignorieren. grepl(pattern, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE) Finden wir heraus, welche der fünf Tiere ein c enthalten, mit grepl().
In diesem Fall suchst du nach Tieren, die ein c enthalten – das Muster ist also einfach c.
Wie du siehst, enthält cat, cheetah und mice ein c, daher ist an diesen Indizes im Vektor animals_regex der Wert TRUE, während für die anderen FALSE zurückgegeben wird.
Jetzt wollen wir die Elemente finden, die mit c beginnen, nicht nur solche, die irgendwo ein c enthalten.
Dafür setzt du ein Zirkumflex ^ an den Anfang des Suchmusters.
grepl(pattern ='^c', x = animals_regex)#nur cat und cheetah beginnen mit „c“.Bereitgestellt von
TRUE
FALSE
TRUE
FALSE
FALSE
Da nur cat und cheetah mit c anfangen, sind nur diese Positionen TRUE.
Ähnlich funktioniert das Dollarzeichen $ am Ende des Musters, um Elemente zu finden, die mit einem bestimmten Muster enden. Um ein Tier zu finden, das auf n endet, verwendest du n gefolgt von $.
grepl(pattern ='n$', x = animals_regex)#nur lion endet auf „n“.Bereitgestellt von
FALSE
FALSE
FALSE
TRUE
FALSE
Hinweis: Wenn du mehr über reguläre Ausdrücke lernen willst, tippe ?regex in eine Jupyter-Notebook-Zelle – die Doku zu Regex öffnet sich. Sehr hilfreich ist auch diese Quelle, mit der du Suchmuster entwerfen und direkt auf deine Strings testen kannst.
Analog zu grepl() gibt es grep(). Diese Funktion liefert statt TRUE/FALSE die Indizes der Elemente im Vektor bzw. in der Matrix, die dem Muster entsprechen.
Die Syntax von grep() ist identisch zu grepl(): grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE, invert = FALSE) Nehmen wir dasselbe Beispiel wie oben, wenden diesmal aber grep() an!
Wie grepl() kann auch grep() verschiedene Regex-Muster verarbeiten.
Suchst du mit grep() nach Elementen im Vektor animals_regex, die auf n enden, erwartest du als Ausgabe 4, denn nur lion endet auf n, wie unten gezeigt.
Du hast die Grundlagen regulärer Ausdrücke kennengelernt – etwa, wie du Elemente aus einem Vektor filterst, die einem Muster entsprechen. R kann aber mehr als nur Muster finden. Es gibt eine Reihe weiterer Funktionen, darunter sub().
sub() filtert nicht, sondern ersetzt Treffer durch andere Strings. Schauen wir uns das genauer an!
sub() nimmt im Wesentlichen drei Argumente entgegen:
pattern: das zu suchende Muster bzw. der reguläre Ausdruck,
replacement: der Wert, der an der Trefferposition eingesetzt wird, und
x: der Eingabevektor (Zeichenketten), auf den die Regex angewandt wird.
Die Syntax lautet: sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,fixed = FALSE, useBytes = FALSE) Auch hier nutzen wir dasselbe Beispiel wie oben, um die Funktion zu verstehen!
sub(pattern ='c', replacement ='a', x = animals_regex)Bereitgestellt von
'aat'
'dog'
'aheetah'
'lion'
'miae'
Wie du siehst, wird cat zu aat, cheetah zu aheetah und mice zu miae. Für diese Elemente wurde das Muster erfolgreich gefunden und ersetzt.
Beachte außerdem: sub() ersetzt nur das erste Vorkommen im String. Gibt es zwei c in einer Zeichenkette, wird nur das erste durch a ersetzt, das zweite bleibt unverändert.
Wenn du wirklich jedes einzelne Vorkommen eines Musters ersetzen willst, nutze gsub() – das geht über den Rahmen dieses Tutorials hinaus!
Bevor wir weitergehen, probieren wir noch einen interessanten Ausdruck.
Diesmal verwendest du den Operator | (oder), der auf eines der definierten Muster matcht und, falls gefunden, durch - ersetzt. Denk daran: Mit gsub() werden alle Vorkommen eines Musters im String ersetzt.
gsub(pattern ='c|d|l', replacement ='-', x = animals_regex)#Tiere mit „c“, „d“, „l“ werden durch „-“ ersetzt.Bereitgestellt von
'-at'
'-og'
'-heetah'
'-ion'
'mi-e'
Kommen wir zum letzten Thema dieses Tutorials: Zeit und Datum!
Zeit und Datum
Zeit- und Datumsinformationen sind in vielen Situationen nützlich. Angenommen, du arbeitest an einem Computer-Vision-Problem und möchtest die FPS (Frames per Second) messen, mit denen dein Algorithmus läuft. In so einem Fall kannst du Zeitfunktionen nutzen, um die Verarbeitungsgeschwindigkeit zu ermitteln. Für Aufgaben wie Zeitreihenprognosen und Saisonalitätsanalysen kann R sein Potenzial voll ausspielen.
Zum Einstieg drucken wir mit Sys.Date() das heutige Datum aus. Sys steht für System – es wird also das Datum des Systems zurückgegeben.
Zeit- und Datumswerte gehören in R zum Objekt Date beziehungsweise zum Datentyp Date. Das kannst du mit der Funktion class prüfen, die du bereits im Tutorial Data Types in R kennengelernt hast.
Ähnlich zur Datumsfunktion gibt es Sys.time(), die die aktuelle Systemzeit zurückgibt – tatsächlich sowohl Datum als auch Uhrzeit.
Du weißt nun, wie du aktuelles Datum und aktuelle Uhrzeit bekommst. Als Nächstes: Wie erstellst du Datumswerte für andere Tage, indem du einfach eine Zeichenkette übergibst?
Um ein Date-Objekt für den 10. Mai 1993 zu erzeugen, verwendest du folgende Syntax:
date_may <-as.Date('1993-05-10')#wandelt eine Zeichenkette in ein Date-Objekt umBereitgestellt von
Wichtig: Die Funktion as.Date() erwartet standardmäßig das Format YYYY-MM-DD. Vertauschst du Jahr, Monat oder Tag, führt das zu einem Fehler. Probieren wir’s aus!
date_may <-as.Date('05-1993-10')#R folgt standardmäßig dem ISO-DatumsformatBereitgestellt von
Error in charToDate(x): character string is not in a standard unambiguous format
Traceback:1. as.Date("05-1993-10")2. as.Date.character("05-1993-10")3. charToDate(x)4. stop("character string is not in a standard unambiguous format")Bereitgestellt von
Die gute Nachricht: Du kannst das Format explizit über das Argument format angeben und anpassen.
as.Date() akzeptiert verschiedene Eingabeformate, konvertiert das Ergebnis aber am Ende wieder ins ISO-Format. Das siehst du, wenn du date_may ausgibst.
Dieses Tutorial ist ein guter Einstieg für alle, die verschiedene praktische Hilfsfunktionen in R kennenlernen möchten. Als Übung bietet es sich an, tiefer in reguläre Ausdrücke einzusteigen. Sie werden in vielen Anwendungen genutzt und sind ein sehr mächtiges Werkzeug, wenn es ums Bereinigen oder Vorverarbeiten von Textdaten geht.
Stell gern Fragen zu diesem Tutorial in den Kommentaren.
Mach dich mit Python-Datenstrukturen vertraut: Lerne mehr über Datentypen und primitive sowie nicht-primitive Datenstrukturen wie Strings, Listen, Stapel usw.
Lerne die Funktionen und Methoden von Python-Listen kennen. Schau dir jetzt die Code-Beispiele für list() und andere Python-Funktionen und -Methoden an!
Lerne, wie du Python-Listen mit Techniken wie Slicing, List Comprehensions und itertools aufteilen kannst. Finde heraus, wann du welche Methode für die beste Datenverarbeitung nutzen solltest.
Gewinne Vertrauen in die OLS-Regression, indem du ihre theoretischen Grundlagen beherrschst. Erforsche, wie du einfache Implementierungen in Excel, R und Python durchführst.
In diesem Tutorial lernst du mehrere Funktionen und Helfer kennen, die in der Programmiersprache R einfach und häufig genutzt werden. Zuerst schauen wir uns einige mathematische Funktionen an. Danach widmest du dich Funktionen, die eng mit R-Datenstrukturen verknüpft sind: das Bearbeiten verschachtelter Listen, reguläre Ausdrücke sowie Arbeiten mit Zeit- und Datumswerten.
Mathematische Funktionen
Schau dir die folgenden Codezellen an, die mehrere mathematische Funktionen verwenden.
Zunächst definierst du zwei Vektoren, nämlich
xundy, die sowohl positive als auch negative Werte enthalten.Nimm nun die beiden Vektoren
xundyund führe Folgendes durch:Wie wäre es, wenn du die obige Zeile in kleinere Teile zerlegst und dir jede Funktion im Detail ansiehst?
abs()liefert einfach den positiven beziehungsweise absoluten Wert der Elemente der Vektorenxundy.Wendest du
abs()aufxundyan, erwartest du nur positive Werte, wie unten gezeigt.round(). Sie rundet die Eingabe. Über ein zusätzliches Argument gibst du an, auf wie viele Dezimalstellen gerundet werden soll. Standardmäßig rundetround()auf null Nachkommastellen.Wendest du
round()auf die Vektorenxundyan, sieht die Ausgabe wie folgt aus:sum()berechnet die Summe der Elemente eines Vektors oder einer Matrix. Übergibst du zum Beispiel einen Zeilenvektor, erhältst du als Skalar die Summe aller Elemente zurück.In unserem Fall werden die Vektoren
xundyansum()übergeben. R berechnet also jeweils die Summe der Vektorelemente und gibt einen Skalar aus.mean()den arithmetischen Mittelwert. Dabei werden die Zahlen addiert und durch die Anzahl der Werte geteilt.Hier ist die Eingabe für
mean()ein Zeilenvektor der Länge zwei mit den Zahlen7und48. Der Mittelwert ist also die Summe der beiden Werte geteilt durch die Anzahl der Elemente, also 2.Gar nicht so schwer, oder?
Weiter geht’s mit dem nächsten, besonders spannenden Teil dieses Tutorials!
Funktionen für Datenstrukturen
Schauen wir uns nun einige Datenstrukturen wie Listen und Vektoren an. Du lernst verschiedene Möglichkeiten, mit der Datenstruktur
listzu arbeiten, einelistumzukehren und wie du Listen in Vektoren und umgekehrt umwandelst.Die folgende Funktion ist eine
list()beziehungsweise eineListe von Listen, auch verschachtelte Liste genannt. Sie erstellt eine Liste von Elementen, die logische Werte, numerische Werte und Zeichenketten enthalten kann.Im folgenden Beispiel gibt es drei Listen innerhalb einer Liste:
log,chundint_vec. Jede davon hat einen Datentyp bzw. ein R-Objekt: logisch, numerisch oder Zeichen/String.logist ein logischer Wert, TRUE oder FALSE.chist die Zeichenkettehello_datacamp.int_vecist eine Folge numerischer Werte.Da
logundchselbsterklärend sind, schauen wir unsint_vecgenauer an.Gehen wir den obigen Ausdruck Schritt für Schritt durch.
Die Funktion
seqerzeugt eine Zahlenfolge in absteigender Reihenfolge von 8 bis 2.Die Syntax von
seq()lautet: seq(x1,x2, by = y)Die ersten beiden Argumente
x1undx2geben den Bereich der Folge an, also wo sie beginnt und endet. Das Argumentbylegt die Schrittweite der Erhöhung oder Verringerung fest.Zum Beispiel erzeugt die folgende Zeile eine Folge von 100 bis 200 in 20er-Schritten.
In unserem Beispiel liefert
seqeine Folge von 8 bis 2 (inklusive) mit einer Schrittweite von -2, also einen Vektor der Länge 4.Als Nächstes zur Funktion
rep.Sie wiederholt das Eingabeargument, üblicherweise einen Vektor oder eine Liste. Mit dem Argument
times(eine ganze Zahl) gibst du an, wie oft die Eingabe wiederholt wird.reperwartet zwei Argumente: die Eingabe und die gewünschte Anzahl an Wiederholungen.Wendest du
repauf unser Beispiel (einen Vektor der Länge 4) an, erhältst du einen Ausgabeverktor der Länge 8.Wenn statt des gesamten Vektors jedes einzelne Element wiederholt werden soll, nutzt du statt
timesdas Argumenteach.Der Unterschied zwischen
timesundeachliegt im entstehenden Muster der Wiederholungen.Zuletzt noch die Funktion
sort(). Sie ist eine generische, selbsterklärende Funktion zum Sortieren vieler Datenstrukturen wie Vektoren oder Listen. Sie funktioniert nicht nur für numerische Werte, sondern auch für logische Werte und Zeichen. Standardmäßig wird aufsteigend sortiert.Gib die Ausgabe von
repansortweiter, um das finale Ergebnis zu erhalten.Super! Damit hast du den langen Ausdruck
int_vecaus der Listelist_defineganz entspannt nachvollzogen.Als Nächstes schauen wir uns den Inhalt der Liste
list_definemit der Funktionstr()an.str()zeigt die Struktur von R-Objekten an.Schauen wir uns ein paar praktische R-Ausdrücke an:
is-Funktionen kannst du den Typ deiner Datenstruktur prüfen. Das Ergebnis ist logisch (TRUE/FALSE) – ideal für Bedingungen.Wird hingegen ein Vektor übergeben, der keine Liste ist, erhältst du FALSE, wie unten gezeigt.
asgefolgt von.list()und übergib den Vektor als Argument. Damit wandelst du den Vektor in eine Liste um.unlistin einen Vektor „abrollen“. R flacht dazu die gesamte Listenstruktur ab und gibt einen einzelnen Vektor aus.Analog zu
is.list()kannst du mitis.vector()prüfen, ob ein Argument ein Vektor ist.Wandeln wir nun die große Liste
list_definein einen Vektor um. Wichtig: Ein Vektor kann nur einen einzigen Datentyp enthalten. Daher werden sowohllogischeals auchnumerischeWerte zu Zeichenketten konvertiert.Bevor wir zum nächsten Thema übergehen, noch ein Blick auf
append()undrev().append()einen oder mehrere Vektoren bzw. Listen an einen bestehenden oder neuen Vektor/Liste an.Probieren wir
append()auf der Listelist_defineaus. Du siehst, dass die Liste anschließend 6 statt 3 Elemente enthält, denn du hast sie mit sich selbst verknüpft.list_definemitrev()um.Reguläre Ausdrücke
Viele finden reguläre Ausdrücke zunächst kompliziert. Sie sind jedoch ein zentrales Thema – nicht nur in R, sondern auch in anderen Sprachen wie Python. Viele Programmiersprachen, darunter R, bringen eingebaute Regex-Funktionalität mit.
Reguläre Ausdrücke lassen sich in zahlreichen Anwendungen einsetzen und sind besonders nützlich, wenn du Textdaten vorverarbeiten möchtest. Sie kommen etwa in der Verarbeitung natürlicher Sprache (NLP) zum Einsatz.
Auch Suchmaschinen und Texteditoren nutzen sie.
Reguläre Ausdrücke, kurz
regexoderregexp(auchrationale Operatorengenannt), sind Zeichenfolgen, die ein Suchmuster definieren. Diese Muster werden von verschiedenen String-Suchalgorithmen verwendet, um ein Muster zu finden, zu ersetzen oder passende Elemente zu filtern.Starten wir mit den Funktionen
grep()undgrepl().Der Einfachheit halber definieren wir einen Zeilenvektor
animals_regexder Länge 5, auf dem du Regex-Muster anwenden wirst.Zuerst zur Funktion
grepl().grepl()gibt ein logisches Ergebnis zurück: Stimmt die Zeichenkette mit dem Muster überein, kommt TRUE, sonst FALSE.Die Syntax ist klar: Erstes Argument ist das gesuchte Muster, zweites Argument ist der Eingabe-String/Vektor, in dem gesucht werden soll. Die restlichen Argumente kannst du vorerst ignorieren. grepl(pattern, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE) Finden wir heraus, welche der fünf Tiere ein
centhalten, mitgrepl().In diesem Fall suchst du nach Tieren, die ein
centhalten – das Muster ist also einfachc.Wie du siehst, enthält
cat,cheetahundmiceeinc, daher ist an diesen Indizes im Vektoranimals_regexder Wert TRUE, während für die anderen FALSE zurückgegeben wird.Jetzt wollen wir die Elemente finden, die mit
cbeginnen, nicht nur solche, die irgendwo eincenthalten.Dafür setzt du ein Zirkumflex ^ an den Anfang des Suchmusters.
Da nur
catundcheetahmitcanfangen, sind nur diese Positionen TRUE.Ähnlich funktioniert das Dollarzeichen
$am Ende des Musters, um Elemente zu finden, die mit einem bestimmten Muster enden. Um ein Tier zu finden, das aufnendet, verwendest dungefolgt von$.Hinweis: Wenn du mehr über reguläre Ausdrücke lernen willst, tippe
?regexin eine Jupyter-Notebook-Zelle – die Doku zu Regex öffnet sich. Sehr hilfreich ist auch diese Quelle, mit der du Suchmuster entwerfen und direkt auf deine Strings testen kannst.grepl()gibt esgrep(). Diese Funktion liefert statt TRUE/FALSE die Indizes der Elemente im Vektor bzw. in der Matrix, die dem Muster entsprechen.Die Syntax von
grep()ist identisch zugrepl(): grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE, fixed = FALSE, useBytes = FALSE, invert = FALSE) Nehmen wir dasselbe Beispiel wie oben, wenden diesmal abergrep()an!Wie erwartet, bekommst du die Indizes der Elemente
cat,cheetahundmicezurück – nicht TRUE/FALSE. Das war’s im Grunde schon!Vergleichen wir
grep()undgrepl()noch mitwhich.which()liefert die Indizes der Elemente eines logischen Vektors, die TRUE sind.Verknüpfst du das mit
grepl(), kannst du also den logischen Vektor anwhich()übergeben und erhältst als Ergebnis dasselbe wie vongrep().Wie
grepl()kann auchgrep()verschiedene Regex-Muster verarbeiten.Suchst du mit
grep()nach Elementen im Vektor animals_regex, die aufnenden, erwartest du als Ausgabe 4, denn nurlionendet aufn, wie unten gezeigt.Gut gemacht!
Du hast die Grundlagen regulärer Ausdrücke kennengelernt – etwa, wie du Elemente aus einem Vektor filterst, die einem Muster entsprechen. R kann aber mehr als nur Muster finden. Es gibt eine Reihe weiterer Funktionen, darunter
sub().sub()filtert nicht, sondern ersetzt Treffer durch andere Strings. Schauen wir uns das genauer an!sub()nimmt im Wesentlichen drei Argumente entgegen:Die Syntax lautet: sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,fixed = FALSE, useBytes = FALSE) Auch hier nutzen wir dasselbe Beispiel wie oben, um die Funktion zu verstehen!
Wie du siehst, wird
catzuaat,cheetahzuaheetahundmicezumiae. Für diese Elemente wurde das Muster erfolgreich gefunden und ersetzt.Beachte außerdem:
sub()ersetzt nur das erste Vorkommen im String. Gibt es zweicin einer Zeichenkette, wird nur das erste durchaersetzt, das zweite bleibt unverändert.Wenn du wirklich jedes einzelne Vorkommen eines Musters ersetzen willst, nutze
gsub()– das geht über den Rahmen dieses Tutorials hinaus!Bevor wir weitergehen, probieren wir noch einen interessanten Ausdruck.
Diesmal verwendest du den Operator
|(oder), der auf eines der definierten Muster matcht und, falls gefunden, durch-ersetzt. Denk daran: Mitgsub()werden alle Vorkommen eines Musters im String ersetzt.Kommen wir zum letzten Thema dieses Tutorials: Zeit und Datum!
Zeit und Datum
Zeit- und Datumsinformationen sind in vielen Situationen nützlich. Angenommen, du arbeitest an einem Computer-Vision-Problem und möchtest die FPS (Frames per Second) messen, mit denen dein Algorithmus läuft. In so einem Fall kannst du Zeitfunktionen nutzen, um die Verarbeitungsgeschwindigkeit zu ermitteln. Für Aufgaben wie Zeitreihenprognosen und Saisonalitätsanalysen kann R sein Potenzial voll ausspielen.
Zum Einstieg drucken wir mit
Sys.Date()das heutige Datum aus. Sys steht für System – es wird also das Datum des Systems zurückgegeben.Einfach, oder?
Zeit- und Datumswerte gehören in R zum Objekt
Datebeziehungsweise zum DatentypDate. Das kannst du mit der Funktionclassprüfen, die du bereits im Tutorial Data Types in R kennengelernt hast.Ähnlich zur Datumsfunktion gibt es
Sys.time(), die die aktuelle Systemzeit zurückgibt – tatsächlich sowohl Datum als auch Uhrzeit.Date-Objekte erstellen
Du weißt nun, wie du aktuelles Datum und aktuelle Uhrzeit bekommst. Als Nächstes: Wie erstellst du Datumswerte für andere Tage, indem du einfach eine Zeichenkette übergibst?
Um ein Date-Objekt für den 10. Mai 1993 zu erzeugen, verwendest du folgende Syntax:
Wichtig: Die Funktion
as.Date()erwartet standardmäßig das FormatYYYY-MM-DD. Vertauschst du Jahr, Monat oder Tag, führt das zu einem Fehler. Probieren wir’s aus!Die gute Nachricht: Du kannst das Format explizit über das Argument
formatangeben und anpassen.as.Date()akzeptiert verschiedene Eingabeformate, konvertiert das Ergebnis aber am Ende wieder ins ISO-Format. Das siehst du, wenn dudate_mayausgibst.Datumsarithmetik
Wäre es nicht praktisch, wenn du mit Date-Objekten in R auch rechnen könntest?
Addiere 1 zu
date_may, und du siehst den Tag danach.Wie du siehst, wird aus dem 10. Mai 1993 der 11. Mai 1993. Genauso kannst du auch einen Tag subtrahieren.
Angenommen, du möchtest den Altersunterschied zwischen dir und deinem älteren Geschwister ermitteln.
Fazit
Glückwunsch – du hast das Tutorial abgeschlossen.
Dieses Tutorial ist ein guter Einstieg für alle, die verschiedene praktische Hilfsfunktionen in R kennenlernen möchten. Als Übung bietet es sich an, tiefer in reguläre Ausdrücke einzusteigen. Sie werden in vielen Anwendungen genutzt und sind ein sehr mächtiges Werkzeug, wenn es ums Bereinigen oder Vorverarbeiten von Textdaten geht.
Stell gern Fragen zu diesem Tutorial in den Kommentaren.
Wenn du mehr über R lernen möchtest, mach den DataCamp-Kurs Intermediate R und sieh dir unser Tutorial Using Functions in R an.