Datenformate und Tabellen Revisited


Artithmetische Operatoren (Wdh.)

| Operator | Description | |----------|--------------| | + | addition | | - | subtraction | | * | multiplication | | / | division | | ^ or ** | exponentiation |


Logische Operatoren

| Operator | Description | |----------|-------------| | < | kleiner als / less than | | <= | kleiner gleich / less than or equal to | | > | größer als / greater than | | >= | größer gleich / greater than or equal to | | == | exakt gleich / exactly equal to | | != | ungleich / not equal to | | !x | nicht x / Not x | | x & y | x UND y / x AND y | | isTRUE(x) | ist wahr? / test if X is TRUE |


Kontrollstrukturen: if-else

schokolade <- c("milka", "lindt", "ritter-sport", "alpia", "schogetten")
schokolade[4] == "alpia"
if (schokolade[5] != "alpia"){
  print("her mit dem zeug")
} else {
  print("bleib mir weg damit")
}

Kontrollstrukturen: for-Schleifen

for (i in c(1,2,3,4,5)) print(i) # auch für character vectors, logische vektoren
for (i in 1:5){ print(i) }
for (i in c("a", "b", "c")){ print(i) }
for (schoki in schokolade) print(schoki)
for (i in 1:length(schokolade)) print(schokolade[i])

Verknüpfung von Kontrollstrukturen

Hier ein ganz einfaches Szenario, das man aber in der Praxis oft nutzen kann: Iteration durch einen Vektor und Durchführung einer Anweisung, wenn eine bestimmte Bedingung erfüllt ist.

for (schoki in schokolade){
  if (schoki == "alpia"){
    print("großer jubel")
  } else {
    print("weg damit!!!!")
  }  
}

Definition von Funktionen

add_one <- function(x){x + 1}
add_one(1)
add_anything <- function(x, y){x + y}
add_anything(5, 5)

Funktionen II

add_anything_default <- function(x, y = 2){
  x + y
}
add_anything_default(x = 5)
add_anything_default(x = 5, 3)
add_anything_default(x = 5, y = 6)

Funktionen richtig anwenden

Warum es gut ist, Funktionen zu verstehen ... Ein kleines Szenario:

tab <- read.table(
  "https://opendata-duisburg.de/sites/default/files/Corona%2030.04.2020.csv",
  sep = ";"
)
tab[1:5,]

Was muss man tun, um eine ordentliche Tabelle zu importieren?


Funktionen und Pipes

Insbesondere im "tidyverse"-Ökosystem sind Verkettungen von Funktionsaufrufen über "Pipes" gängig. Hier wird der Rückgabewert einer Funktion zum ersten Argument der nachfolgenden Funktion, die mit dem Pipe-Operator %>% angebunden wird.

library(magrittr)
tab <- read.table("https://opendata-duisburg.de/sites/default/files/Corona%2030.04.2020.csv", sep = ";", header = TRUE)
tab[["Datum"]] <- as.Date(tab[["Datum"]], format = "%d.%m.%Y ")
tab %>%
  subset(Datum >= as.Date("2020-04-01")) %>%
  barplot(height = .[["X.Aktuell.infiziert"]])

Ausblick: sapply

lapply(1:3, function(x){x + 1})
sapply(1:3, function(x){x + 1})

Aufgabe

Analysieren Sie die Altersstruktur der Wähler_innen der Parteien bei der Bundestagswahl 2017 mit dem GLES-Datensatz. Legen Sie dafür ein mehrseitiges pdf-Dokument an: Auf jeder Seite soll ein Törtchen-Diagramm den prozentualen Anteil einer Alterskohorte zeigen.

Tip: Vermutlich werden Sie mit einer Schleife arbeiten? Bevor eine Schleife durchgeführt wird, öffnen Sie ein pdf-Dokument.

pdf(file = tempfile())

Dieses muss dann am Ende geschlossen werden ...

dev.off()


ablaette/learningR documentation built on July 1, 2023, 1:11 a.m.