Skip to content

Commit 1e5cabf

Browse files
committed
Version 1
1 parent 2a2aff2 commit 1e5cabf

14 files changed

Lines changed: 2788 additions & 0 deletions
454 KB
Binary file not shown.
237 KB
Binary file not shown.
651 KB
Binary file not shown.
319 KB
Binary file not shown.

PDF/R-Skript_-_Teil4-Grafiken.pdf

776 KB
Binary file not shown.

RMarkdown/R-Skript_-_Teil1-Datenman_Deskriptiv.Rmd

Lines changed: 811 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,220 @@
1+
---
2+
title: "R-Skript PUNO-Forschungsprojekt"
3+
author: "Dominik Vogel"
4+
date: 'Stand: `r format(Sys.time(), "%d.%m.%Y")`'
5+
output:
6+
pdf_document:
7+
keep_tex: yes
8+
number_section: yes
9+
toc: yes
10+
toc_depth: 3
11+
html_notebook:
12+
number_section: yes
13+
html_document: default
14+
word_document:
15+
toc: yes
16+
toc_depth: 3
17+
subtitle: Teil 1.1 -- Objekttypen
18+
classoption: a4paper
19+
header-includes:
20+
- \usepackage[ngerman]{babel}
21+
- \usepackage[babel]{csquotes}
22+
- \DefineVerbatimEnvironment{code}{Verbatim}{frame=single, numbers=left}
23+
- \usepackage{etoolbox}
24+
- \makeatletter \preto{\@verbatim}{\topsep=0pt \partopsep=0pt } \makeatother
25+
- \clubpenalty10000
26+
- \widowpenalty10000
27+
- \displaywidowpenalty=10000
28+
- \usepackage{titling}
29+
- \postdate{\begin{center} \includegraphics[height=1.5em]{fig/cc-by}\\[\bigskipamount] \end{center}}
30+
---
31+
32+
```{r setup_output, include=FALSE}
33+
hook_output_def = knitr::knit_hooks$get('output')
34+
knitr::knit_hooks$set(output = function(x, options) {
35+
if (!is.null(options$vspaceout)) {
36+
end <- paste0("\\vspace{", options$vspaceout, "}")
37+
stringr::str_c(hook_output_def(x, options), end)
38+
} else {
39+
hook_output_def(x, options)
40+
}
41+
})
42+
43+
hook_source_def = knitr::knit_hooks$get('source')
44+
knitr::knit_hooks$set(source = function(x, options) {
45+
if (!is.null(options$vspaceecho)) {
46+
begin <- paste0("\\vspace{", options$vspaceecho, "}")
47+
stringr::str_c(begin, hook_source_def(x, options))
48+
} else {
49+
hook_source_def(x, options)
50+
}
51+
})
52+
```
53+
54+
```{r setup, include=FALSE}
55+
knitr::opts_chunk$set(vspaceout='2em')
56+
knitr::opts_chunk$set(vspaceecho='1em')
57+
```
58+
59+
```{r, include = FALSE}
60+
# install.packages("tidyverse", dep = TRUE)
61+
```
62+
63+
64+
65+
66+
# Vektoren
67+
68+
Der zweite wichtige Objekttyp wird als Vektor bezeichnet. Ein Vektor enthält mehrere Elemente desselben Datentyps (dazu gleich mehr).
69+
70+
Ein Vektor wird mit ``c()`` (*combine*) erstellt.
71+
72+
```{r}
73+
alter <- c(21, 78, 24, 26, 35)
74+
alter
75+
```
76+
77+
Der Vektor ``alter`` hat nun fünf Elemente, die alle vom Typ ``numeric`` sind. Mit einem solchen Vektor kann man auch rechnen:
78+
79+
```{r}
80+
alter * 12
81+
```
82+
83+
``R`` multipliziert in diesem Fall alle Werte des Vektors mit 12.
84+
85+
Auch erste Kennzahlen lassen sich mit einem Vektor ermitteln:
86+
87+
```{r}
88+
mean(alter)
89+
```
90+
91+
92+
93+
Wir können für einen Vektor auch Text verwenden:
94+
95+
```{r}
96+
geschlecht <- c("maennlich", "weiblich")
97+
geschlecht
98+
```
99+
100+
Dieser Vektor hat zwei Elemente vom Typ ``character``. Mit einem solchen Vektor kann man natürlich nicht rechnen
101+
102+
```{r, error=TRUE}
103+
geschlecht * 2
104+
```
105+
106+
107+
108+
Mischt man verschiedene Datentypen, so speichert ``R`` die Elemente des Vektors wenn möglich in einem Datentyp, der alle Elemente vereinen kann.
109+
110+
```{r}
111+
mix <- c(5, 7, "weiblich")
112+
mix
113+
```
114+
115+
An den Anführungszeichen um 5 und 7 sieht man, dass die beiden Werte nicht als Zahlen (``numeric``) sondern als Text (``character``) gespeichert wurden. Damit lässt sich folglich auch nicht mehr rechnen.
116+
117+
```{r, error = TRUE}
118+
mix * 5
119+
```
120+
121+
# Matrizen
122+
123+
Matrizen sind im Prinzip Tabellen. Man kann sie auch als Sammlung von Vektoren betrachten. Jede Spalte ist ein Vektor.
124+
125+
Erstellen wir eine Matrix, die in der ersten Spalte das Gewicht mehrerer Personen und in der zweiten Spalte deren Größe speichert. Hierzu erstellen wir zunächst zwei Vektoren und "kleben" diese anschließend zusammen mit ``alter`` zu einer Matrix zusammen.
126+
127+
```{r}
128+
gewicht <- c(90, 83, 55, 76, 54)
129+
groesse <- c(191, 150, 165, 170, 171)
130+
131+
X <- cbind(alter, gewicht, groesse)
132+
X
133+
```
134+
135+
Mit Hilfe von eckigen Klammern kann man auf einzelne Werte zugreifen
136+
137+
```{r}
138+
X[1,3]
139+
```
140+
141+
Der Befehle gibt den Wert in der ersten Zeile und dritten Spalte aus. Die Grundlegende Logik ist folglich ``Matrix[Zeile, Spalte]``.
142+
143+
Man kann auch auf eine gesamte Zeile oder Spalte zugreifen.
144+
145+
146+
```{r}
147+
X[1,]
148+
```
149+
150+
```{r}
151+
X[,3]
152+
```
153+
154+
155+
156+
# Data Frame
157+
158+
Der Objekttyp, der uns am meisten beschäftigen wird, ist der Data Frame. Er ist eine Erweiterung von Matrizen und ermöglicht es, Vektoren mit verschiedene Datentypen zu vereinen. Er ist das, was in ``SPSS`` oder ``Stata`` der Datensatz ist. Mit dem Unterschied, dass ``R`` viele verschiedene Datensätze gleichzeitig "geöffnet" haben kann. Ein Data Frame ist lediglich ein weiteres Objekt.
159+
160+
Erweitern wir unsere Matrix ``X`` um eine Spalte für Geschlecht:
161+
162+
```{r}
163+
geschlecht <- c("m", "m", "w", "m", "w")
164+
X <- data.frame(alter, gewicht, groesse, geschlecht)
165+
X
166+
```
167+
168+
Data Frames haben nicht nur den Vorteil, dass sie Vektoren unterschiedlicher Art gemeinsam speichern können, sondern auch, dass man die einzelnen Spalten über ihren Namen ansprechen kann:
169+
170+
```{r}
171+
X$groesse
172+
X$geschlecht
173+
```
174+
175+
Für Geschlecht sehen wir nun einen etwas merkwürdigen Output. Der Grund hierfür ist, dass ``R`` diesen Vektor in einen Faktor umgewandelt hat.
176+
177+
```{r}
178+
class(X$geschlecht)
179+
```
180+
181+
Faktoren sind ``R``s Objekttyp zur Speicherung von ordinalen Variablen mit einer begrenzten Anzahl von Ausprägungen. Mehr dazu weiter unten. Wenn wir die Umwandlung in einen Faktor verhindern wollen, können wir in vielen Funktionen die Option ``stringsAsFactors`` verwenden:
182+
183+
184+
```{r}
185+
X <- data.frame(alter, gewicht, groesse, geschlecht, stringsAsFactors = FALSE)
186+
X
187+
```
188+
189+
``geschlecht`` ist nun als normale ``character`` Variable gespeichert.
190+
191+
```{r}
192+
class(X$geschlecht)
193+
```
194+
195+
196+
197+
# Faktoren
198+
199+
Faktoren sind ``R``s Objekttyp zur Speicherung von ordinalen Variablen mit einer begrenzten Anzahl von Ausprägungen. Dieser Datentyp kann an verschiedenen Stellen nützlich sein, weil ``R`` die entsprechende Variable automatisch wie eine ordinale Variable behandelt (zum Beispiel bei der Erstellung von Grafiken oder in Regressionen).
200+
201+
Geschlecht hat, wie oben zu sehen, zwei Ausprägungen: m und w.
202+
203+
Es ist sehr einfach, einen Vektor in einen Faktor umzuwandeln:
204+
205+
```{r}
206+
geschlecht_faktor <- factor(geschlecht)
207+
geschlecht_faktor
208+
```
209+
210+
Man kann die Bezeichnung der Levels auch verändern.
211+
212+
```{r}
213+
levels(geschlecht_faktor)[levels(geschlecht_faktor) == "m"] <- "male"
214+
levels(geschlecht_faktor)[levels(geschlecht_faktor) == "w"] <- "female"
215+
geschlecht_faktor
216+
str(geschlecht_faktor)
217+
```
218+
219+
220+
Der Objekttyp Faktor kann manchmal nützlich sein, verursacht aber ungleich häufiger Probleme. Dies ist vor allem dann der Fall, wenn eigentlich numerische Variablen in Faktoren umgewandelt werden und dies Fehlermeldungen verursacht, weil eine bestimmte Funktion ein numerisches Objekt erwartet. Die Importfunktion ``read_csv()`` verhindert daher auch die Bildung von Faktoren beim Import. Ist eine numerische Variable bereits in einen Faktor umgewandelt worden, hilft die Funktion ``as.numeric()``.

0 commit comments

Comments
 (0)