Auf dieser Seite (die übrigens mit R erstellt wurde) findest du eine Einführung in die grundlegenden Funktionen von R.

Hier wirst du lernen

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:

varA <- 5

varA <- 33

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:

variable1 <- 10

Unsere variable1 trägt nun der Wert \(10\). Jetzt können wir mit dieser rechnen:

variable1 + 9

variable1 - 3

variable1 * variable1 

100 / variable1 

Aufgaben

Kannst du - zunächst ohne Ausprobieren - vorhersagen, was das Resultat der folgenden Zeilen ist?

var.a <- 6*30
var.b <- 9

var.a + var.b

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:

vector1 <- c(10, 20, 30, 40, 50)

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?

vector1 + 1

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.

vector2 <- c("bacon", "eggs", "sausage", "beans", "spam")

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:

vector3 <- 1:5

vector3
[1] 1 2 3 4 5

Sequenzen können aber auch beim Betrachten bestimmter Teile eines Vektors nützlich sein:

vector2[2:4]
[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.

  1. Erstelle einen Faktor, der sechs Farbnamen beinhaltet.
Lösung
farben <- c("rot", "blau", "gruen", "gelb", "pink", "schwarz")


  1. Nutze den Sequenzbefehl um den dritten, vierten und fünften Farbnamen ausgegeben zu bekommen.
Lösung
farben[3:5]


  1. Erstelle einen Vektor mit den Werten \(3\), \(6\) und \(9\).
Lösung
zahlen <- c(3, 6, 9)


  1. Erstelle einen weiteren Vektor, welcher den Vektor aus 3. fünfmal wiederholt.
Lösung
zahlen_wiederholung <- rep(zahlen, 5)


  1. 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:

devtools::install_github("dosc91/SfL", upgrade_dependencies = FALSE)

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 message:
1 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:

df <- read.csv("irgendeine.csv", stringsAsFactors=TRUE)

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!):

data.pl <- subset(data_s, typeOfS == "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:

data.is <- subset(data_s, typeOfS == "is")

Möchten wir nun die beiden kleinen Data Frames zu einem gemeinsamen weiteren Data Frame zusammenfügen, so ist auch das möglich:

data.pl.is <- rbind(data.pl, data.is)

Der rbind() Befehl setzt den einen Data Frame ganz simpel unter den anderen.

Aufgaben

Nun bist du an der Reihe:

  1. Bestimme die Länge von speaker und item.
Lösung
length(data_s$speaker)

length(data_s$item)


  1. Erstelle einen Data Frame, der nur Daten für nicht-morphemisches (nm) /s/ enthält.
Lösung
data.nm <- subset(data_s, typeOfS == "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:

random1 <- runif(5)

random1
[1] 0.7600328 0.7811837 0.4007245 0.3819393 0.5937519

R kann sogar zufällige Zahlen erzeugen, die der Normaldistribution folgen:

random2 <- rnorm(500)

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:

random1 <- runif(5)

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:

data.pl <- subset(data_s, typeOfS == "pl") # dieses Subset haben wir bereits an anderer Stelle erstellt

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.

random1 <- runif(5)

random1
[1] 0.27414709 0.34463695 0.34618064 0.09361221 0.04260352

Wir sehen, dass random1 nicht sortiert ist. Das ändern wir nun:

random1.sortiert <- sort(random1)

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:

random1.sortiert2 <- sort(random1.sortiert, decreasing = TRUE)

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:

vektor.n <- c(10:15)

vektor.n
[1] 10 11 12 13 14 15

Diesen können wir nun z.B. in einen character-Vektor oder Faktor umwandeln:

vektor.n.character <- as.character(vektor.n)

vektor.n.character
[1] "10" "11" "12" "13" "14" "15"
vektor.n.factor <- as.factor(vektor.n)

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:

vector2 <- as.factor(c("bacon", "eggs", "sausage", "beans", "spam"))

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:

vector2 <- as.factor(c("bacon", "eggs", "sausage", "beans", "spam"))

vector2
[1] bacon   eggs    sausage beans   spam   
Levels: bacon beans eggs sausage spam
vector2.umsortiert <- factor(vector2, levels = c("spam", "sausage", "eggs", "beans", "bacon"))

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 ...
data_s$list <- NULL

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:

neue.spalte <- runif(150)
data_s$neue.spalte <- neue.spalte

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.