Arrr! als Programmiersprache

Wie funktioniert R?

Da du, wenn du dies liest bestimmt schon von R gehört hast und ein gewisses Grundwissen in der Logik von Programmierung hast, möchte ich hier nicht mehr auf die Geschichte und generelle Umgebung eingehen. Vielmehr möchte ich einen Überblick über die Methoden geben die in R in sogennanten “packages” implemenitert sind und wie diese nützlich eingesetzt werden können. Dieses Dokument ist übrigens auch mit R geschrieben, genauer gesagt mit R Markdown (document.Rmd). Dies ist eine Auszeichnungssprache die sehr simpel konzipiert ist und die nützlich für jegliche Dokumente (Worddokumente, Präsentationen, Internetseiten, …) ist die du für die Universität oder den Arbeitgeber erstellen musst und viel Auswertungscode beinhalten.

Daten einlesen

Um Daten zur Auswertung einzulesen gibt es verschiedene Ansätze. Je nachdem, was für dich relevant ist kannst du einen der folgenden Wege auswählen:

  • selbstständig Daten einlesen, die bereits analog vorliegen (in eine Exceltabelle oder direkt in R)
  • auf Daten zurückgreifen, die bereits digital vorliegen (Bspw. eine Exceltabelle)
  • auf Daten aus einem R package zurückgreifen (Trainingsdaten)
  • Daten in R zufällig oder willkürlich erzeugen, die auf Startwerten beruhen (Simulationsdaten)

Bereits dieser erste Schritt bevor wir überhaupt mit einem Forschungsprozess begonnen haben zeigt, wie mächtig solch eine Programmierumgebung sein kann.

Aber nun zum eigentlich interessanten.

Selbstständig Daten einlesen

Erstelle eine Datenmatrix in einem Tabellenkalkulationsprogramm wir Excel. Bedenke: Einzelne Beobachtungen in Zeilen untereinander, Variablen in Spalten nebeneinander. Wir können in R die Daten später immernoch leicht manipulieren und diese Logik ändern, es ist für uns aber langfristig einfacher immer eine menschlich leicht lesbare Logik in unseren Datenblättern beizubehalten, damit man nicht den Überblick verliert.

Wenn du eine Tabelle als Datenmatrix erstellt hast (.xlsx, .csv, .sav, .dta) kannst du diese einfach in R einlesen. Nutze das Package “foreign”, das leicht fremde Datentypen einliest. Für .xlsx benötigen wir “openxlsx”. Ich habe hier das gängigste Vorgehen aufgeführt. Es gibt noch andere Pakete, die diese Einlesefunktion abdecken, jedoch benötigen, diese wieder weitere Voraussetzungen zur Nutzung. Es gibt noch einige weitere Datentypen, die hiermit einlesbar sind, hier werden die gängisten aufgeführt.

# install.packages("foreign")
# install.packages("openxlsx")

library("foreign")

library("openxlsx")

 

# ?read.xlsx

data <-read.xlsx("C:/root/subfolder/data.xlsx", sheet = 1, colNames = TRUE or FALSE)

# ?read.csv

data <- read.csv("C:/.../daten.csv", header= T or F, sep="")

# ?read.spss

spss <- read.spss("daten.sav", use.value.labels = T/F)

# ?read.dta

stata <- read.dta("C:/admin/unterordner/daten.dta")

Wie man sieht haben wir eine ähnliche Struktur der Funktionen. Zuerst immer der Pfad. Dann einige Bedingungen, wie:

  • Welches Tabellenblatt?
  • Gibt es einen Header/Spaltennamen?
  • Wie sind die Beobachtungen sepperiert ("“,”,“,”;", …)
  • Sollen die Wertebezeichungen genutzt werden, oder die numerischen Faktoren?

Wollen wir Daten selber erzeugen können wir einem Objekt direkt Werte zuweisen. Diese können problemlos verscheidene Niveaus (nominal, ordinal/rang, metrisch/kardinal) besitzen und numerisch oder alphanumerisch sein. Daneben gibt es noch andere spezielle Möglichkeiten auf die ich hier nicht eingehen möchte.

Ebenso können wir vorhandene Trainingsdatensätze in R nutzen. Cars ist dabei wohl der berühmteste.

Oder wir kombinieren die eingelesenen Daten aus einem Ordner in einer anderen Datenmatrix neu.

data <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

data <- c("nie", "selten", "teils/teils", "oft", "immer")

data("cars")

data <- read.csv("../data/data.csv", sep=";", header=T)

x1 <-c(data[,1])
x2 <-c(data[,2])
x3 <-c(data[,3])
x4 <-c(data[,4])
X <- matrix(c(x0,x2,x3,x4), nrow=33, ncol=4)

Daten sichten

Nun haben wir einen Datensatz in unserer Umgebung (Global Environment) und können die uns die Daten anschauen und erste deskriptive Auswertungen vornehmen, um uns mit ihnen vertraut zu machen.

data <- read.csv("../data/data.csv", sep=";", header=T)

attributes(data) # Zeigt alle Attribute (unterliegende Struktur) eines Objektes

$names
[1] "Preis"     "Kilometer" "Alter"     "Art"      

$class
[1] "data.frame"

$row.names
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
 
data
# Gibt das gesamte Objekt "data" aus, etwas umständlich,
# besonders bei großen Datansätzen mit vielen Zeilen und Spalten

  Preis Kilometer Alter Art
1  21800        15     2   1
2  18800        66     2   2
3  20500        29     2   3
4  18900        40     3   2
5  21200        68     3   3
6  16800        37     3   3
7  17500        60     3   1
8  23800        26     3   1
9  16800        58     3   2
10 14500        96     4   3
11 19900        60     4   2
12 15900        69     4   3
13 17900        44     4   1
14 19500        37     4   1
15 16000        46     4   1
16 16500        70     5   2
17 15800        90     5   1
18 15900        78     5   3
19 16900        55     5   2
20 14800       106     5   3
21 15500        30     5   2
22 16500        27     5   1
23 14900        83     5   2
24 12400        75     5   3
25 12800        53     6   1
26 14900        70     6   1
27 12900        94     6   1
28 12800        86     6   3
29 13500        70     6   3
30 10950       121     7   1
31 12900        78     7   3
32 10800       104     7   2
33 11600        95     7   3

View(data) # Zeigt das Objekt "data" in einem neuen Tab

 
head(data, n=5) # Zeigt die ersten 5 Zeilen (numeriert) plus Variablennamen des Objektes "data"

  Preis Kilometer Alter Art
1 21800        15     2   1
2 18800        66     2   2
3 20500        29     2   3
4 18900        40     3   2
5 21200        68     3   3

tail(data, n=10)# Zeigt die letzten 10 Zeilen (numeriert) plus Variablennamen des Objektes "data"

   Preis Kilometer Alter Art
24 12400        75     5   3
25 12800        53     6   1
26 14900        70     6   1
27 12900        94     6   1
28 12800        86     6   3
29 13500        70     6   3
30 10950       121     7   1
31 12900        78     7   3
32 10800       104     7   2
33 11600        95     7   3

 
show(data[, "Preis"])
# Zeigt in der Ausgabe die Varable mit dem Namen "Preis"
# des Objektes "data"

[1] 21800 18800 20500 18900 21200 16800 17500 23800 16800 14500 19900 15900 17900 19500 16000 16500
[17] 15800 15900 16900 14800 15500 16500 14900 12400 12800 14900 12900 12800 13500 10950 12900 10800
[33] 11600

View(data[, "Kilometer"])
# Zeigt die Varable mit dem Namen "Kilometer"
# des Objektes "data" in einem neuen Tab

 
class(data) # Gibt an welche Klasse von Objekten das Objekt "data" zugehörig ist

[1] "data.frame"

class(data[, "Preis"]) # Gibt an welche Klasse von Varablentypen "Preis" zugehörig ist

[1] "integer"

 
print(data[, "Preis"])
# Zeigt in der Ausgabe die Varable mit dem Namen "Preis"
# des Objektes "data", ähnlich zu show

[1] 21800 18800 20500 18900 21200 16800 17500 23800 16800 14500 19900 15900 17900 19500 16000 16500
[17] 15800 15900 16900 14800 15500 16500 14900 12400 12800 14900 12900 12800 13500 10950 12900 10800
[33] 11600

cat(data[, "Alter"])
# Zeigt alle Kategorien für jeden Wert im Datensatz für die Variable,
# ist etwas umständlich, da man meist nicht alle Variablen ausgeben möchte

2 2 2 3 3 3 3 3 3 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 6 6 6 6 6 7 7 7 7

unique(data[, "Alter"]) # Gibt nur die einzeln unterschiedlichen Werte aus

[1] 2 3 4 5 6 7

range(data[, "Alter"]) # Gibt das Minimum und das Maximum aus

[1] 2 7
 
table(data[, "Preis"])
# Gibt die absoluten Häufigkeiten als Tabelle in der Ausgabe aus.
# Meist etwas unübersichtlich, hier empfiehlt sich die Kombination mit View() oder
# das Paket "tibble", das die Möglichkeit die Daten ordentlicher darzustellen

10800 10950 11600 12400 12800 12900 13500 14500 14800 14900 15500 15800 15900 16000
    1     1     1     1     2     2     1     1     1     2     1     1     2     1
16500 16800 16900 17500 17900 18800 18900 19500 19900 20500 21200 21800 23800
    2     2     1     1     1     1     1     1     1     1     1     1     1
 
 
names(data) # Gibt die Variablennamen des Objektes aus

[1] "Preis"     "Kilometer" "Alter"     "Art"


pairs(data)
# Erzeugt eine simple Korrelationsmatrix aller Variablenkombinationen des Objektes,
# um Zusammenhänge schnell übersichtlich darzustellen. Dieser Plot muss allerdings nicht immer sinnvoll sein,
# wie die Ausgabe zeigt eignet sich dies strenggenommen nur für quantitative Variablen
Korrelationsmatrix des Objektes "data" in R

Fraglich bleibt: Wie kann ich weiterführende Analysen mit Datensätzen verschiedener Typen in R durchführen? Wie kann ich Daten in R aufbereiten, manipulieren oder neue Daten und Subsets erzeugen? Wie kann ich Daten speichern, Skripte schreiben und ganze Dokumente mit R erstellen? Was kann man noch alles mit R anstellen?

Gemeinsam können wir diese Fragen und weitere gerne beantworten. Schreibe mir einfach eine Mail.