knitr::opts_chunk$set(
echo = TRUE,
include = TRUE,
message = FALSE,
warning = FALSE,
fig.align = "center"
)Einführung in R
Autorin: Jule Rieß
Inhaltsverzeichnis
- Aufbau und Funktionsweise von R Studio & Quarto
- 1.1 Aufbau R-Studio
- 1.2 Ausführen eines Codes
- 1.3 Überschriften in Quarto
- 1.4 Hervorhebungen in Quarto
- 1.5 Listen
- 1.6 Syntax für einen R-Code-Chunk
- 1.7 Globale Chunk-Optionen
- 1.8 Die „R-Sprache“
- Erste Schritte in R
- 2.1 Variablen zuweisen
- 2.2 Grundlegende Datentypen
- 2.3 Grundlegende Operationen
- 2.4 Datenstrukturen
- 2.4.1 Vektoren
- 2.4.2 Data Frames
- 2.5 Weitere grundlegende Operationen
- 2.5.1 Mathematische Operationen
- 2.5.2 Logische Operationen
- 2.6 Funktionen definieren
- 2.7 Kontrollstrukturen
- 2.7.1 If-Else Bedingungen
- 2.7.2 Schleifen
- Packages in R
- 3.1 Packages installieren und laden
- 3.2 Häufig verwendete Packages
- Statistische Analysen
- 4.1 Deskriptive Statistik
- 4.2 Korrelation berechnen
- 4.3 Datenvisualisierung mit ggplot2
- Aufgabenstellung Skill - Basic R
- Literaturverzeichnis
1. Aufbau und Funktionsweise von R Studio & Quarto
1.1 Aufbau R Studio
console oben = permanent
console unten = temporär
environment (oben rechts): zeigt alle aktuell geladenen Objekte an (=Arbeitsspeicher)
multifunktionales Fenster unten rechts: Files, Plots, Packages, Help, Viewer, Presentation
1.2 Ausführen eines Codes in Quarto
Indem man auf die Schaltfläche „Render“ klickt, wird ein Dokument erstellt, das sowohl den Inhalt als auch die Ausgabe des eingebetteten Codes enthält. Der Code wird wie folgt eingebettet:
1 + 1[1] 2
1.3 Überschriften in Quarto
Mit dem Symbol # können Überschriften gemacht werden. Die Anzahl an # Symbolen bestimmt das Level der Überschrift:
# Heading Level 1
## Heading Level 2
### Heading Level 31.4 Hervorhebungen in Quarto
- kursiv: Der Text wird mit einem Sternchen oder Unterstrich umbrochen:
*kursiv*oder_kursiv_ - fett: Der Text wird mit zwei Sternchen oder Unterstrichen umbrochen:
**fett**oder__fett__ - Kursiv und fett: Kombination von beiden:
***kursiv und fett***
1.5 Listen
Ungeordnete Listen:
-,*, oder+gefolgt von einem Leerzeichen:- Item 1 - Item 2geordnete Listen: Zahlen gefolgt von einem Punkt:
1. First item 2. Second item
1.6 Syntax für einen R-Code-Chunk
Die drei Backticks ````` starten und schließen den Code-Chunk
{r}zeigt an, dass der Code in R geschrieben ist
- Innerhalb des Blocks schreibt man einen R-Code.
Beim Rendern wird der Code ausgeführt und die Ausgabe eingefügt
Beispiel:
::: {.cell layout-align=“center”}
# Dies ist ein R-Code:::
1.7 Globale Chunk-Optionen
- Um zu vermeiden, dass dieselben Chunk-Optionen (wie echo = FALSE, message = FALSE usw.) in jedem Code-Block wiederholt werden, kann man mit der Funktion knitr::opts_chunk$set() die Chunk-Optionen global am Anfang des Dokuments festsetzen. Dies geschieht in einem Setup-Chunk, der in der Regel in der Ausgabe nicht angezeigt wird:
#siehe oben1.8 Die “R-Sprache”
- Innerhalb eines Codes kennzeichnet man Kommentare mit einer Raute (s. u.)
- um Hilfe zu sämtlichen Funktionen in R zu erhalten kann man ein Fragezeichen oder “help” vor die Funktion/ das Paket o.ä. setzen
- bei zwei Fragezeichen erfolgt eine globale Suche
?mean #Hilfe erhalten zur 'mean' Funktion
help("sum") #Alternative zum Fragezeichen
??psych #globale Suchanfrage zu einem Package2. Erste Schritte in R
2.1 Variablen zuweisen
In R kann man Werte in Variablen speichern. Dies geschieht mit dem Zuweisungsoperator <- oder =.
# Einfache Zuweisung
name <- "Max"
alter = 25
# Numerische Zuweisung
x <- 10
y <- 20
# Mehrere Werte als Vektor
zahlen <- c(1, 2, 3, 4, 5)
x <- 10 #nach Konventionen empfohlene Zuweisung
10 -> y #nach Konvention nicht verwenden
z = 5 #erlaubt aber weniger üblich (nicht verwenden)2.2 Grundlegende Datentypen
R kennt verschiedene Datentypen:
# Numerisch
zahl <- 42.5
# Character/String
text <- "Hallo Welt"
# Logisch
wahr <- TRUE
falsch <- FALSE
# Integer
ganzzahl <- 42L2.3 Grundlegende Operationen
a <- 2 + 3 # arithmetisch
b <- 5 ^ 2 # Potenzierung
c <- a > b # Vergleich2.4 Datenstrukturen
2.4.1 Vektoren
# Numerischer Vektor
zahlen <- c(1, 2, 3, 4, 5)
# Character Vektor
namen <- c("Anna", "Ben", "Clara")
# Vektor-Operationen
zahlen + 2 # Addiert 2 zu jedem Element[1] 3 4 5 6 7
zahlen * 3 # Multipliziert jedes Element mit 3[1] 3 6 9 12 15
2.4.2 Data Frames
# Data Frame erstellen
df <- data.frame(
name = c("Max", "Lisa", "Tom"),
alter = c(25, 30, 28),
groesse = c(180, 165, 175)
)
# Data Frame anzeigen
print(df) name alter groesse
1 Max 25 180
2 Lisa 30 165
3 Tom 28 175
# Spalte auswählen
df$name[1] "Max" "Lisa" "Tom"
df[["alter"]][1] 25 30 28
2.5 Grundlegende Operationen
2.5.1 Mathematische Operationen
# Grundrechenarten
summe <- 10 + 5
differenz <- 10 - 5
produkt <- 10 * 5
quotient <- 10 / 5
# Mathematische Funktionen
wurzel <- sqrt(16)
potenz <- 2^32.5.2 Logische Operationen
# Vergleichsoperatoren
x <- 5
y <- 10
x < y # kleiner als[1] TRUE
x <= y # kleiner oder gleich[1] TRUE
x == y # gleich[1] FALSE
x != y # ungleich[1] TRUE
2.6 Funktionen definieren
# Eigene Funktion erstellen
quadrat <- function(x) {
return(x^2)
}
# Funktion verwenden
ergebnis <- quadrat(5)
print(ergebnis)[1] 25
2.7 Kontrollstrukturen
2.7.1 If-Else Bedingungen
# Einfache if-else Struktur
x <- 10
if (x > 5) {
print("x ist größer als 5")
} else {
print("x ist kleiner oder gleich 5")
}[1] "x ist größer als 5"
2.7.2 Schleifen
# For-Schleife
for (i in 1:5) {
print(paste("Durchlauf:", i))
}[1] "Durchlauf: 1"
[1] "Durchlauf: 2"
[1] "Durchlauf: 3"
[1] "Durchlauf: 4"
[1] "Durchlauf: 5"
# While-Schleife
j <- 1
while (j <= 3) {
print(j)
j <- j + 1
}[1] 1
[1] 2
[1] 3
3. Packages in R
3.1 Packages installieren und laden
R-Packages erweitern die Funktionalität von R. Man verwendet sie wie folgt:
# Package installieren (einmalig notwendig)
install.packages("tidyverse", repos = "https://cran.r-project.org")
# Package laden (in jeder neuen R-Session notwendig)
library(tidyverse)3.2 Häufig verwendete Packages
# Datenmanipulation und Visualisierung
library(dplyr)
library(ggplot2)
# Datenbereinigung
library(tidyr)
# Statistik
library(stats)
# Daten einlesen
library(readr)
library(readxl) #Excel-Dateien
#Psychometrie/Deskriptivstatistik
library(psych)
#Regressionsdiagnostik
library(car)
#u.v.m.4. Statistische Analysen
4.1 Deskriptive Statistik
# Beispieldaten
daten <- c(12, 15, 18, 22, 25, 28)
# Mittelwert
mean(daten)[1] 20
# Median
median(daten)[1] 20
# Standardabweichung
sd(daten)[1] 6.09918
# Zusammenfassung
summary(daten) Min. 1st Qu. Median Mean 3rd Qu. Max.
12.00 15.75 20.00 20.00 24.25 28.00
#fehlende Werte prüfen
sum(is.na(data))[1] 0
4.2 Korrelation berechnen
# Beispieldaten erstellen
x <- c(1, 2, 3, 4, 5)
y <- c(2, 4, 5, 4, 5)
# Korrelation berechnen
korrelation <- cor(x, y)
print(korrelation)[1] 0.7745967
# Korrelationstest
cor.test(x, y)
Pearson's product-moment correlation
data: x and y
t = 2.1213, df = 3, p-value = 0.124
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.3400820 0.9842358
sample estimates:
cor
0.7745967
4.3 Datenvisualisierung mit ggplot2
# Scatterplot
ggplot(df, aes(x = alter, y = groesse)) +
geom_point() +
labs(title = "Alter vs. Größe",
x = "Alter",
y = "Größe in cm")# Balkendiagramm
ggplot(df, aes(x = name, y = alter)) +
geom_bar(stat = "identity") +
labs(title = "Alter nach Person")5. Aufgabenstellung Skill - Basic R
Lesen Sie sich in die oben genannten Punkte ein (Verstehen der Grundlagen von RStudio; dazu gehört bspw. ein neues Projekt und R; Skripte zu erstellen; Kenntnis der grundlegenden Datentypen von R (numeric, logical, character, vector, factor, data.frame); Kenntnis der grundlegenden numerischen und logischen Operatoren; Fähigkeit grundlegende statistische Verfahren mit R durchführen (Signifikanztest für Korrelation, t-Test, Regression, Varianzanalyse); Einsatz von R-Kommentaren und Coding-Style-Richtlinien, um R-Skripte verständlicher zu machen)
Finden sie die Bedeutung des folgendem Skript heraus (s. folgender R-Chunk)
set.seed( 1234 ) #setzt den Zufallszahlengenerator auf einen festen Startwert.Dadurch wird die zufällige Datenerzeugung reproduzierbar – man bekommt bei jedem Lauf die gleichen Ergebnisse.
daten <- data.frame( "y" = rnorm( 200, mean = 3, sd = 1 ),
"x" = as.factor( rep( 0 : 1, each = 100 ) ),
"Gruppe" = ifelse( runif( 200 ) > .5, "A", "B" )
) # y = rnorm generiert 200 Zufallswerte aus einer Normalverteilung mit Mittelwert = 3, Standardabweichung = 1
# x = as.factor erzeugt eine Faktorvariable mit zwei Gruppen : 0 und 1, je 100-mal wiederholt,
# runif erzeugt 200 Zufallszahlen zwischen 0 und 1; mit ifelse wird daraus eine Zufallszuweisung zu den Gruppen "A" oder "B"Fazit: Der R-Code erstellt einen zufälligen Datensatz mit 200 Beobachtungen, wobei einige Variablen simuliert werden. Das Ergebnis ist ein Data Frame mit drei Spalten.
- Modifizieren und ergänzen sie dieses Skript so dass … 3.1) Die Variable “Gruppe” im data.frame “daten” den neuen Namen “Bedingung” trägt
library(dplyr)
daten <- daten %>%
rename(Bedingung = Gruppe)3.2) Nehmen sie an, “y” sei die AV und “x” die UV; führen sie einen Signifikanztest für deren Korrelation, einen t-Test, eine Varianzanalyse und eine Regression durch
daten$x_num <- as.numeric(as.character(daten$x)) #x als numerisch für Korrelation
cor.test(daten$y, daten$x_num) #Pearson-Korrelation & Test
Pearson's product-moment correlation
data: daten$y and daten$x_num
t = 1.3748, df = 198, p-value = 0.1707
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.04206727 0.23284097
sample estimates:
cor
0.09724129
t.test(y ~ x, data = daten) #Mittelwertvergleich von y zwischen den Gruppen in x
Welch Two Sample t-test
data: y by x
t = -1.3748, df = 197.85, p-value = 0.1707
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
-0.48202061 0.08601076
sample estimates:
mean in group 0 mean in group 1
2.843238 3.041243
anova_model <- aov(y ~ x, data = daten) #einfaktorielle Varianzanalyse
summary(anova_model) Df Sum Sq Mean Sq F value Pr(>F)
x 1 1.96 1.960 1.89 0.171
Residuals 198 205.35 1.037
lm_model <- lm(y ~ x, data = daten) #lineare Regression
summary(lm_model)
Call:
lm(formula = y ~ x, data = daten)
Residuals:
Min 1Q Median 3Q Max
-2.8970 -0.6781 -0.1016 0.6007 3.0025
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.8432 0.1018 27.919 <2e-16 ***
x1 0.1980 0.1440 1.375 0.171
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.018 on 198 degrees of freedom
Multiple R-squared: 0.009456, Adjusted R-squared: 0.004453
F-statistic: 1.89 on 1 and 198 DF, p-value: 0.1707
3.3) Schreiben sie einen R-Kommentar an das Ende ihres Skripts, der die Ergebnisse kurz zusammenfasst
Pearson-Korrelation r = 0.097 (schwach positiv) p = 0.171 → nicht signifikant → Kein statistisch gesicherter Zusammenhang zwischen x und y.
t-Test (Mittelwertvergleich) Mittelwert Gruppe 0: 2.84, Gruppe 1: 3.04 t = -1.37, p = 0.171 → Der Unterschied der Mittelwerte ist nicht signifikant.
Varianzanalyse (ANOVA) F(1, 198) = 1.89, p = 0.171 → Kein signifikanter Unterschied der Mittelwerte zwischen den Gruppen.
Lineare Regression lineare Regressionsgleichung: y = 2,8432 + 0,1980*x R² = 0.009 → Modell erklärt nur ca. 1 % der Varianz p = 0.171 → Regressionskoeffizient ist nicht signifikant
Fazit: Alle Verfahren (Korrelation, t-Test, ANOVA, Regression) kommen zum gleichen Ergebnis: Es gibt keinen signifikanten Zusammenhang zwischen der UV x und der AV y. Der Effekt ist klein und statistisch nicht bedeutsam.
6. Literaturverzeichnis
Fenn, J. (2025, Mai 16). The tiny Quarto guide [Unveröffentlichte Manuskriptversion].
Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. New York: Chapman; Hall/CRC. https://doi.org/10.1201/9781138359444.