Einführung in R und RStudio
Auf dieser Seite (die übrigens mit R erstellt wurde) findest du eine Einführung in die grundlegenden Funktionen von R.
Hier wirst du lernen
- wie wichtig R Skripte sind
- was Variablen sind und wie sie funktionieren
- was Vektoren sind und wie sie funktionieren
- wie Funktionen in R funktionieren
- was Packages sind und wie man sie nutzt
- was Data Frames sind und wie sie funktionieren
- welche weiteren nützlichen Funktionen und Anwendungen es gibt
Der gesamte Code, den du hier findest, kann von dir 1:1 in R umgesetzt werden. Die größte Lernwirkung hat diese Einführung, wenn du möglichst alles einmal selbst in R durchführst.
01 Scripts
Bitte nutze Scripts, wenn du mit RStudio arbeitest! Arbeite niemals direkt in der Console
: alles, was du hier tippst, ist für immer verloren!
Um ein neues Script zu erstellen, klicke oben links auf das weiße Blatt mit dem grünen +
-Symbol oder nutze File
> New File
> R Script
. Du kannst Scripts jederzeit abspeichern und zu einem anderen Zeitpunkt wieder öffnen.
Damit dein Script übersichtlich bleibt, kannst du folgende Tricks anwenden.
Kommentare: Kommentare in R werden mit einem #
begonnen und enden automatisch in der nächsten Zeile. Beispiel:
# Hallo, ich bin ein Kommentar
# die folgende Zeile wird ausgeführt:
1+1
# die folgende Zeile wird nicht ausgeführt:
# 1+1
Abschnitte: Du kannst dein R Script in Abschnitte unterteilen. Hierzu nutzt du #### Abschnittstitel ----
. Beispiel:
#### Abschnitt 1: Daten ----
Die einzelnen Abschnitte kannst du unterhalb des Script-Fensters auswählen und so durch dein Script navigieren.
Um etwas direkt aus deinem Script auszuführen, setzt du deinen Cursor in die Zeile, die ausgeführt werden soll. D.h. der Cursor blinkt in folgender Zeile z.B. zwischen +
und 2
:
1 + 2
Dann drückst du zeitgleich die Tasten Strg
+ Enter
(Windows) bzw. Cmd
+ Return
(Mac).
In R wirst du oftmals die Symbolkette <-
nutzen. Diese kannst du mit dem Tasturkürzel Alt
+ -
(Windows) bzw. Option
+ -
(Mac) erstellen.
02 Einstieg
Wir fangen simpel an. Berechne die folgenden Aufgaben mit R.
125+179
65593.00035-6593.33657
1769.357*753.001
9852/0.000025
3*866585.3==2599756
25^4 > 20^5
2e-5 < 0.00003
3^2!=9
Gar nicht so kompliziert, oder?
03 Variablen
Als nächstes schauen wir uns an, wie Variablen definiert werden. Variablen, also Namen für z.B. bestimmte Werte, können ganz verschiedene Bezeichnungen tragen. Wichtig hierbei ist, dass nur Unterstrich und Punkt als Sonderzeichen erlaubt sind. Zahlen können ebenfalls in Variablennamen vorkommen - nur nicht an erster Stelle.
Aufgaben
Also: Welche der folgenden Variablennamen sind okay?
- weight1
- 2c_length
- data.new
- _new.data.1b
- 1b.da
- ta.experiment
- new_data_6
- last_trial.c
- data.as.formated.by.jack.the.other.day
- d1
Lösung
- weight1 OKAY
- 2c_length NICHT OKAY
- data.new OKAY
- _new.data.1b NICHT OKAY
- 1b.da NICHT OKAY
- ta.experiment OKAY
- new_data_6 OKAY
- last_trial.c OKAY
- data.as.formated.by.jack.the.other.day OKAY
- d1 OKAY
Achtung: Variablen können immer nur einfach definiert sein. Was heißt das? Erstellst du die Variable varA
zunächst mit dem Wert \(x\), so wird dieser Wert überschrieben, wenn du diesen Variablennamen erneut nutzt:
<- 5
varA
<- 33
varA
varA
[1] 33
Also immer darauf achten, welche Variablennamen bereits vergeben sind! Da alle Variablen im Environment-Fenster (oben rechts) gelistet werden, kannst du hier immer checken, welche Namen schon genutzt sind.
Variablen können ebenfalls zum Rechnen genutzt werden. Dazu folgendes Beispiel zum Nachmachen:
<- 10 variable1
Unsere variable1
trägt nun der Wert \(10\). Jetzt können wir mit dieser rechnen:
+ 9
variable1
- 3
variable1
* variable1
variable1
100 / variable1
Aufgaben
Kannst du - zunächst ohne Ausprobieren - vorhersagen, was das Resultat der folgenden Zeilen ist?
<- 6*30
var.a <- 9
var.b
+ var.b var.a
Probiere aus, ob deine Vorhersage korrekt war!
04 Vektoren
Vektoren - das klingt zunächst nach schrecklichen Erinnerungen aus dem Physikunterricht. Aber keine Sorge, darum geht’s hier nicht wirklich. Vektoren sind “Sammlungen” mehrerer Werte. Die einzelnen Werte eines Vektors nennen wir Elemente des Vektors.
Vektoren werden in R durch eine Unmenge verschiedenster Befehle erzeugt. Der einfachste ist der folgende:
<- c(10, 20, 30, 40, 50) vector1
Wenn wir diesen Vektor erstellt haben, können wir dessen Werte ganz simpel abrufen:
vector1
[1] 10 20 30 40 50
Auch mit Vektoren kann man rechnen. Was denkst du, ist das Ergebnis folgender Zeile?
+ 1 vector1
Aufgaben
Ausprobieren!
Eine wichtige Eigenschaft von Vektoren ist ihre Länge. Diese kann einfach in Erfahrung gebracht werden.
length(vector1)
[1] 5
Vektortypen
R kennt verschiedene Vektortypen:
- character; Bsp. “a”, “white”
- integer; Bsp. 2L, 453k, 47
- numerical: Bsp. 25.1, 0.0002
- logical; Bsp. TRUE, FALSE
- complex; Bsp. 1+4i
Vektoren, die Wörter enthalten, werden i.d.R. auch Faktoren genannt.
<- c("bacon", "eggs", "sausage", "beans", "spam")
vector2
vector2
[1] "bacon" "eggs" "sausage" "beans" "spam"
Sequenzen
Sequenzen werden in R mit dem Doppelpunkt ausgedrückt:
1:5
[1] 1 2 3 4 5
Sequenzen kann man auch einsetzen, um Vektoren zu definieren:
<- 1:5
vector3
vector3
[1] 1 2 3 4 5
Sequenzen können aber auch beim Betrachten bestimmter Teile eines Vektors nützlich sein:
2:4] vector2[
[1] "eggs" "sausage" "beans"
05 Funktionen
Funktionen sind wohl der eigentliche Grund, wegen welchem R ein so praktisches Programm ist. Funktionen übernehmen den Großteil der Arbeit: sie berechnen, manipulieren, ändern, schreiben und lesen, plotten, usw.
Zwei Funktionen sind dir sogar schon begegnet: c()
und length()
.
R kennt eine Vielzahl von Funktionen. Wenn mal eine fehlt, kann man diese i.d.R. in einem der zahlreichen und kostenfreien Packages finden (mehr zu Packages hier).
Weitere oft gebrauchte Funktionen sind sum()
und rep()
.
sum(vector1)
[1] 150
rep("a", 6)
[1] "a" "a" "a" "a" "a" "a"
Funktionen können auch kombiniert werden - immer auf die Anzahl der Klammern achten!
rep(c(5, 15, 25), 3)
[1] 5 15 25 5 15 25 5 15 25
Aufgaben
Nun bist du an der Reihe.
- Erstelle einen Faktor, der sechs Farbnamen beinhaltet.
Lösung
<- c("rot", "blau", "gruen", "gelb", "pink", "schwarz") farben
- Nutze den Sequenzbefehl um den dritten, vierten und fünften Farbnamen ausgegeben zu bekommen.
Lösung
3:5] farben[
- Erstelle einen Vektor mit den Werten \(3\), \(6\) und \(9\).
Lösung
<- c(3, 6, 9) zahlen
- Erstelle einen weiteren Vektor, welcher den Vektor aus 3. fünfmal wiederholt.
Lösung
<- rep(zahlen, 5) zahlen_wiederholung
- Berechne die Summe des Vektors aus 4.
Lösung
sum(zahlen_wiederholung)
[1] 90
06 Packages
R kennt eine Vielzahl verschiedenster Funktionen, aber bei weitem nicht alle. Hierzu nutzt R s.g. Packages. Packages sind kostenfrei - solltest du jemals einem Package online begegnen, das Geld von dir verlangt: Finger weg davon!
Ganz old school kann man Packages über einen Befehl installieren:
install.packages("beepr")
In RStudio können wir jedoch auch bequemer Packages finden und installieren. Hierzu nutzt du den Packages-Reiter unten rechts. Klicke auf Install
und tippe im mittleren Textfeld beepr
ein - alle anderen Angaben musst du nicht anpassen. Klicke dann auf den Install-Button, und RStudio installiert das ausgewählte Package.
Damit du ein Package bzw. dessen Inhalt nutzen kannst, musst du es aktivieren - und zwar jedesmal, wenn du R bzw. RStudio neugestartet hast.
library("beepr")
Nun kannst du die Funktionen des beepr
Packages nutzen, z.B.:
beep()
Das SfL Package
Der SfL Workshop hat ein eigenes R Package, das von Dominic und Janina entwickelt wird. Das SfL
Package beinhaltet u.a. Datensets sowie einige nützliche Funktionen, die im weiteren Verlauf des Workshops vorgestellt werden. Im Folgenden findest du die Installationsanleitung.
1. Zunächst muss ein anderes Package installiert werden:
install.packages("devtools")
2. Nun kann das SfL Package installiert werden:
::install_github("dosc91/SfL", upgrade_dependencies = FALSE) devtools
3. Während der Installation wird dir folgende Frage gestellt:
: Enter one or more numbers, or an empty line to skip updates
Tippe keine Zahl ein, sondern bestätige die Abfrage mit einem Druck der Enter-Taste.
4. Ist das Package erfolgreich installiert, siehst du folgende Warnung in der Console:
:
Warning message1 components of `...` were not used.
:
We detected these problematic arguments* `upgrade_dependencies`
Did you misspecify an argument?
Diese Warnung kann ignoriert werden.
Um das Package nutzen zu können, musst du es zunächst laden:
library("SfL")
Möchtest du die Dokumentation des Packages anschauen, nutze folgenden Code:
help(package="SfL")
Während des Workshops wirst du zwei Funktionen häufig nutzen:
open_exercise
Mit dieser Funktion kannst du die html-Dateien für den praktischen Teil des Workshops bequem aus R heraus öffnen:
open_exercise(02, 2022, "german")
open_slides
Mit dieser Funktion kannst du die PDF-Version der Slides öffnen, die Dominic und Janina im theoretischen Teil des Workshops nutzen:
open_slides(01, 2022, "german")
07 Data Frames
Nun ist es nur selten der Fall, dass wir Forschungsdaten per Hand in R eintippen. Viel einfacher ist es, wenn wir Tabellen (i.d.R. csv-Dateien) in R einlesen, in welchen die Daten aus unseren Experimenten und Co. bereits vorhanden sind.
Als Beispiel für eine solche Datei stellen wir uns vor, dass wir für eine solche für eine Schulklasse und die Noten der Schüler:innen haben. Eine der Spalten enthält alle Namen der Schüler:innen, eine weitere Spalte enthält die Noten für jedes Klassenmitglied für die erste Klausur. Für jede weitere Klausur existiert ebenfalls eine Spalte, in welcher die individuellen Noten eingetragen sind.
Name | Klausur.1 | Klausur.2 | Klausur.3 |
---|---|---|---|
John Tukey | 2 | 1 | 2 |
Florence Nightingale | 5 | 3 | 2 |
Ronald Fisher | 3 | 3 | 5 |
Gertrude Cox | 6 | 5 | 5 |
Karl Pearson | 6 | 2 | 2 |
Janet Norwood | 1 | 5 | 5 |
Laden wir eine solche Datei in R, so nennen wir diese Data Frame, da wir sie als Data Frame Objekt importieren.
Bevor wir allerdings eine Datei importieren können, müssen wir R zunächst mitteilen, wo die Datei überhaupt zu finden ist. Dies geschieht mit folgendem Befehl:
setwd("C:/.../.../.../.../Ordner")
Hinweis: Je nach Betriebssystem kann sich die Art des Slashs unterscheiden. Manche benötigen das /
, andere das \
. Falls beides nicht funktioniert, bietet RStudio über den Reiter Session die Option Set Working Directory
> Choose Directory
an. Navigiere über diese Funktion zum gewünschten Ordner.
In diesem Ordner sucht R nach Dateien, speichert neue Dateien aber auch dort ab.
Möchten wir nun eine csv-Datei importieren, funktioniert das wie folgt:
<- read.csv("irgendeine.csv", stringsAsFactors=TRUE) df
Ob der Import erfolgreich war, siehst du oben rechts im Environment-Fenster: Taucht df
dort auf, lief alles ohne Probleme.
Data Frames & SfL
Im SfL
Package sind einige Data Frames standardmäßig vorhanden. Wenn du diese nutzen möchtest, musst du nach Laden des Packages nur noch den jeweiligen Data Frame anfordern:
library(SfL)
data(data_s)
Nun ist das Data Frame Objekt data_s
im Environment vorhanden.
Data Frames näher betrachten
Mit dem str()
Befehl kannst du dir nun einen ersten Überblick über den Data Frame verschaffen.
str(data_s)
'data.frame': 150 obs. of 24 variables:
$ number : int 460 598 543 732 875 136 403 824 681 918 ...
$ item : Factor w/ 45 levels "blouf","blouk",..: 18 24 22 30 35 6 16 34 28 37 ...
$ speaker : int 11 46 43 42 7 12 49 35 31 4 ...
$ bsex : Factor w/ 2 levels "f","m": 1 1 1 2 1 1 1 1 2 1 ...
$ list : Factor w/ 22 levels "10A","11A","11B",..: 2 3 1 22 17 4 19 15 12 12 ...
$ typeOfS : Factor w/ 3 levels "is","nm","pl": 2 2 2 2 2 2 2 2 2 2 ...
$ folSeg : Factor w/ 15 levels "@","a","A:","e",..: 12 9 11 15 11 9 11 11 7 8 ...
$ slideNumber : int 21 45 23 1 16 14 27 21 34 17 ...
$ transcription : Factor w/ 36 levels "blA:fs","blaUfs",..: 10 15 14 18 26 4 11 25 17 27 ...
$ sDur : num 0.151 0.166 0.207 0.166 0.155 ...
$ baseDur : num 0.312 0.18 0.289 0.313 0.283 ...
$ sDurLog : num -1.89 -1.8 -1.57 -1.8 -1.87 ...
$ baseDurLog : num -1.16 -1.72 -1.24 -1.16 -1.26 ...
$ biphoneProbSum : num 0.0082 0.0085 0.0082 0.0112 0.01 0.0078 0.0069 0.0124 0.0108 0.0109 ...
$ biphoneProbSumBin: Factor w/ 2 levels "high","low": 2 2 2 2 2 2 2 2 2 2 ...
$ age : int 29 24 27 21 25 26 24 29 28 30 ...
$ location : Factor w/ 2 levels "elsewhere","London": 2 1 1 1 1 1 1 2 2 2 ...
$ monoMultilingual : Factor w/ 2 levels "bilingual","monolingual": 2 2 2 2 2 2 2 2 2 1 ...
$ speakingRate : num 4.45 3.25 2.53 2.94 3.81 2.94 2.74 4.64 2.73 3.29 ...
$ pauseDur : num 0.1087 0.0094 0.5147 0 0 ...
$ pauseBin : Factor w/ 2 levels "no_pause","pause": 2 1 2 1 1 1 1 2 2 2 ...
$ folType : Factor w/ 5 levels "APP","F","N",..: 3 4 3 1 3 4 3 3 5 5 ...
$ preC : Factor w/ 4 levels "f","k","p","t": 2 1 4 4 3 4 1 2 3 4 ...
$ googleFreq : int 144000 229000 16300 686000 13800 909000 407 10900 1360000 195000 ...
Aufgaben
Lies dir die Namen der einzelnen im Data Frame enthaltenen Variablen durch und mache dir ein paar Notizen: Welche Variable enthält wohl welche Informationen? Bei welcher Variable hast du keine Idee über ihre Bedeutung? Wie helfen dir die Typen der einzelnen Variablen beim Spekulieren?
Für jede Variable im Data Frame können wir uns mit dem summary()
Befehl eine Zusammenfassung ausgeben lassen:
summary(data_s)
number item speaker bsex list typeOfS folSeg slideNumber transcription sDur baseDur sDurLog baseDurLog biphoneProbSum biphoneProbSumBin age location monoMultilingual speakingRate pauseDur pauseBin folType preC googleFreq
Min. : 10.0 blouk : 8 Min. : 1.00 f:108 3B :12 is:50 k :30 Min. : 1.00 gleIts : 10 Min. :0.04176 Min. :0.1799 Min. :-3.176 Min. :-1.7151 Min. :0.0063 high: 30 Min. :19.00 elsewhere:67 bilingual : 34 Min. :1.520 Min. :0.00000 no_pause:91 APP:47 f:32 Min. : 407
1st Qu.: 242.8 blout : 8 1st Qu.:11.25 m: 42 2A :10 nm:50 w :24 1st Qu.: 9.25 blaUts : 9 1st Qu.:0.09502 1st Qu.:0.2516 1st Qu.:-2.354 1st Qu.:-1.3798 1st Qu.:0.0082 low :120 1st Qu.:22.00 London :83 monolingual:116 1st Qu.:2.842 1st Qu.:0.00000 pause :59 F : 1 k:44 1st Qu.: 29450
Median : 532.5 cloop : 6 Median :25.00 4A :10 pl:50 m :19 Median :24.00 blu:ks : 8 Median :0.11818 Median :0.3063 Median :-2.136 Median :-1.1831 Median :0.0104 Median :26.00 Median :3.355 Median :0.01742 N :29 p:32 Median : 195000
Mean : 525.6 glaik : 6 Mean :24.58 10A : 9 A: :13 Mean :22.38 pli:ts : 8 Mean :0.13153 Mean :0.3191 Mean :-2.111 Mean :-1.1765 Mean :0.0125 Mean :29.11 Mean :3.450 Mean :0.09345 P :39 t:42 Mean : 831224
3rd Qu.: 805.2 glaits : 6 3rd Qu.:36.00 8A : 9 r :12 3rd Qu.:35.00 glIfs : 7 3rd Qu.:0.16284 3rd Qu.:0.3584 3rd Qu.:-1.815 3rd Qu.:-1.0262 3rd Qu.:0.0122 3rd Qu.:30.00 3rd Qu.:3.967 3rd Qu.:0.10733 V :34 3rd Qu.: 689750
Max. :1123.0 blouf : 5 Max. :49.00 11A : 8 l :11 Max. :47.00 glIks : 7 Max. :0.32750 Max. :0.6875 Max. :-1.116 Max. :-0.3747 Max. :0.0308 Max. :58.00 Max. :6.940 Max. :1.24000 Max. :12000000
(Other):111 (Other):92 (Other):41 (Other):101
Hierbei fällt auf, dass verschiedene Variablentypen unterschiedliche Angaben erhalten.
Mit Data Frames arbeiten
Wie dir sicherlich bereits aufgefallen ist, bestehen Data Frames aus einer Menge verschiedener Vektoren. Anders als bei einzelnen Vektoren stellt sich nun allerdings die Frage, wie wir einzelne Vektoren aus dem Data Frame ansteuern können.
Um einen bestimmten Vektor aus einem Data Frame anzusteuern, nutzen wir das Dollar-Symbol $
:
summary(data_s$sDur)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.04176 0.09502 0.11818 0.13153 0.16284 0.32750
So erhalten wir in diesem Fall nur eine Zusammenfassung von sDur
(und nicht vom ganzen Data Frame).
Manchmal ist es notwendig, einen großen Data Frame in kleinere Data Frames zu splitten. Der originale Data Frame geht dabei nicht verloren (es sei denn, du benennst den neuen Data Frame identisch!):
<- subset(data_s, typeOfS == "pl") data.pl
Nun haben wir einen zweiten Data Frame data.pl
, welcher nur die Daten enthält, bei denen der Vektor typeOfS
den Wert pl
hat. Wir erstellen einen weiteren Data Frame für das is-Clitic:
<- subset(data_s, typeOfS == "is") data.is
Möchten wir nun die beiden kleinen Data Frames zu einem gemeinsamen weiteren Data Frame zusammenfügen, so ist auch das möglich:
<- rbind(data.pl, data.is) data.pl.is
Der rbind()
Befehl setzt den einen Data Frame ganz simpel unter den anderen.
Aufgaben
Nun bist du an der Reihe:
- Bestimme die Länge von
speaker
unditem
.
Lösung
length(data_s$speaker)
length(data_s$item)
- Erstelle einen Data Frame, der nur Daten für nicht-morphemisches (
nm
) /s/ enthält.
Lösung
<- subset(data_s, typeOfS == "nm") data.nm
08 Gemischtes
Du bist mit den Punkten 01 bis 07 fertig, hast aber noch Zeit für oder Lust auf mehr? Dann bist du hier genau richtig. Schaue dir die einzelnen Punkte an, und setze sie dann selbst in R um.
Zufällige Zahlen
Möchtest du einen Vektor mit zufälligen Werten erstellen, kannst du die runif()
Funktion nutzen:
<- runif(5)
random1
random1
[1] 0.7600328 0.7811837 0.4007245 0.3819393 0.5937519
R kann sogar zufällige Zahlen erzeugen, die der Normaldistribution folgen:
<- rnorm(500)
random2
hist(random2)
Hinweis: Der hist()
Befehl erstellt ein Histogram. Mehr dazu an Tag 2!
Auf- und Abrunden
Manchmal ist der Output in R sehr genau, d.h. wir erhalten viele Ziffern nach dem Komma. Wir können diese mit dem round()
Befehl bequem runden:
<- runif(5)
random1
random1
[1] 0.5626330 0.9687807 0.9757391 0.3904144 0.8691954
round(random1)
[1] 1 1 1 0 1
round(random1, 2)
[1] 0.56 0.97 0.98 0.39 0.87
round(random1, 4)
[1] 0.5626 0.9688 0.9757 0.3904 0.8692
Dateien schreiben
Wir haben schon gelernt, dass wir R sagen müssen, wo es Dateien findet. An gleicher Stelle schreibt R auch neue Dateien, wenn wir das möchten:
<- subset(data_s, typeOfS == "pl") # dieses Subset haben wir bereits an anderer Stelle erstellt
data.pl
write.csv(data.pl, "nur_plural_s_daten.csv")
Hierbei wird zunächst angegeben, welches Objekt gespeichert (also geschrieben) werden soll. In unserem Fall handelt es sich um data.pl
. Dann wird angegeben, wie die neue Datei heißen soll. In diesem Fall nur_plural_s_daten
. Wichtig: Unbedingt die Dateiendung - also hier .csv
- erwähnen!
Sortieren
Vektoren können von R automatisch sortiert werden.
<- runif(5)
random1
random1
[1] 0.27414709 0.34463695 0.34618064 0.09361221 0.04260352
Wir sehen, dass random1 nicht sortiert ist. Das ändern wir nun:
<- sort(random1)
random1.sortiert
random1.sortiert
[1] 0.04260352 0.09361221 0.27414709 0.34463695 0.34618064
Wir können die Reihenfolge auch ändern, also von groß nach klein sortieren:
<- sort(random1.sortiert, decreasing = TRUE)
random1.sortiert2
random1.sortiert2
[1] 0.34618064 0.34463695 0.27414709 0.09361221 0.04260352
Vektortypen ändern
Manchmal ist es nötig, die Art eines Vektors zu ändern.
Wir beginnen mit einem numerischen Vektor:
<- c(10:15)
vektor.n
vektor.n
[1] 10 11 12 13 14 15
Diesen können wir nun z.B. in einen character-Vektor oder Faktor umwandeln:
<- as.character(vektor.n)
vektor.n.character
vektor.n.character
[1] "10" "11" "12" "13" "14" "15"
<- as.factor(vektor.n)
vektor.n.factor
vektor.n.factor
[1] 10 11 12 13 14 15
Levels: 10 11 12 13 14 15
Faktoren: Levels ändern, umbennen und umordnen
Levels ändern
Möchtest du den Namen eines Levels eines Faktors ändern, kannst du folgende Vorgehensweise nutzen:
<- as.factor(c("bacon", "eggs", "sausage", "beans", "spam"))
vector2
levels(vector2)
[1] "bacon" "beans" "eggs" "sausage" "spam"
Nun möchten wir sausage
umbennen in toast
:
levels(vector2)[levels(vector2)=="sausage"] <- "toast"
levels(vector2)
[1] "bacon" "beans" "eggs" "toast" "spam"
Levels umordnen
Manchmal möchte man aber auch die Reihenfolge von Levels in einem Faktor ändern. Dies funktioniert so:
<- as.factor(c("bacon", "eggs", "sausage", "beans", "spam"))
vector2
vector2
[1] bacon eggs sausage beans spam
Levels: bacon beans eggs sausage spam
<- factor(vector2, levels = c("spam", "sausage", "eggs", "beans", "bacon"))
vector2.umsortiert
vector2.umsortiert
[1] bacon eggs sausage beans spam
Levels: spam sausage eggs beans bacon
Data Frames: Spalten umbennen, entfernen, hinzufügen
Für die folgenden Schritte nutzen wir folgenden Data Frame:
data(data_s)
Spalten umbennen
Wir möchten die Spalte item
in word
umbennen:
str(data_s[1:3])
'data.frame': 150 obs. of 3 variables:
$ number : int 460 598 543 732 875 136 403 824 681 918 ...
$ item : Factor w/ 45 levels "blouf","blouk",..: 18 24 22 30 35 6 16 34 28 37 ...
$ speaker: int 11 46 43 42 7 12 49 35 31 4 ...
names(data_s)[names(data_s)=="item"] <- "word"
str(data_s[1:3])
'data.frame': 150 obs. of 3 variables:
$ number : int 460 598 543 732 875 136 403 824 681 918 ...
$ word : Factor w/ 45 levels "blouf","blouk",..: 18 24 22 30 35 6 16 34 28 37 ...
$ speaker: int 11 46 43 42 7 12 49 35 31 4 ...
Spalten entfernen
Wir möchten die Spalte list
entfernen:
str(data_s[5:8])
'data.frame': 150 obs. of 4 variables:
$ list : Factor w/ 22 levels "10A","11A","11B",..: 2 3 1 22 17 4 19 15 12 12 ...
$ typeOfS : Factor w/ 3 levels "is","nm","pl": 2 2 2 2 2 2 2 2 2 2 ...
$ folSeg : Factor w/ 15 levels "@","a","A:","e",..: 12 9 11 15 11 9 11 11 7 8 ...
$ slideNumber: int 21 45 23 1 16 14 27 21 34 17 ...
$list <- NULL
data_s
str(data_s[5:8])
'data.frame': 150 obs. of 4 variables:
$ typeOfS : Factor w/ 3 levels "is","nm","pl": 2 2 2 2 2 2 2 2 2 2 ...
$ folSeg : Factor w/ 15 levels "@","a","A:","e",..: 12 9 11 15 11 9 11 11 7 8 ...
$ slideNumber : int 21 45 23 1 16 14 27 21 34 17 ...
$ transcription: Factor w/ 36 levels "blA:fs","blaUfs",..: 10 15 14 18 26 4 11 25 17 27 ...
Spalten hinzufügen
Wir möchten eine neue Spalte zum Data Frame hinzufügen:
<- runif(150) neue.spalte
$neue.spalte <- neue.spalte
data_s
head(data_s$neue.spalte)
[1] 0.7584603 0.2216064 0.3753205 0.5929609 0.5683722 0.3789035
Cookbook for R
Immer noch nicht zufrieden? Das Cookbook for R bietet einen Überblick über weitere Grundlagen an. Klicke dazu hier und schaue dir Kapitel 1 bis 6 an.