1 Pakete und Datentypen

1.1 Allgemein

1.1.1 Packages

Packages: R benutzt zur erweiterung von Funktionen bestimmte Packages, die Nutzer hochladen können

Installation: install.package("tidyverse")

Updaten: update("tidyverse")

Nutzung in Programmcode: library("tidyverse")

1.1.2 R-Markdown

R-Markdown = Syntax von Markdown mit eingebauten Ausfürhungsmöglichkeit Beispiel:

x = 10

=> zum Beunutzen Zeile Markieren und CMD+Enter

1.1.3 Installation von wichtigen Paketen für diese Woche

Installation der Pakete

# install.packages(c("haven", "tidyverse"))

Laden in die Session

library("tidyverse")
library("haven")

1.2 Datentypen

Abfragen des Types einer Variable:

mode(10)
## [1] "numeric"

–>Output: numeric

Leere Menge: y <- NULL oder x <- c()

1.2.0.1 Numerisch

entweder integer (natürliche Zahl) oder double (reelle Zahl)

x <- 5.5
mode(x) # out: numeric
## [1] "numeric"
typeof(x) # out: double
## [1] "double"
## Integers: komplizierter
y <- as.integer(3)
typeof(y) # out: integer
## [1] "integer"

1.2.0.2 Character

Zeichenkette, wie string in python

z <- "Hallo"
mode(y) # out: character
## [1] "numeric"

1.2.0.3 logical

logische Werte, wie TRUE, FALSE bzw. T oder F und NA (not available) TRUE = 1 FALSE = 0 praktisch für Statistische Analysen, bspws Anzahl TRUE einfach sum()

is.numeric(x) #out: TRUE
## [1] TRUE
is.character(x) #out: FALSE
## [1] FALSE

1.2.0.4 Veränderung von Datentypen

Datentypen lassen sich in andere Datentypen umwandeln

x <- as.character(x) 
x # out: '5.5'
## [1] "5.5"
x <- as.numeric(x)
x # out: 5.5
## [1] 5.5

Datentyp beeinflusst, welche Funktionen angewendet werden können, und was kombiniert werden kann!

1.2.0.5 vektor

werden erstellt mit c() (combine)

x <- c(1,2,3)
mode(x) # out: 'numeric'
## [1] "numeric"
y <- c(5,"a")
y # out: ('5', 'a')
## [1] "5" "a"

alle Elemente eines Vektors müssn gleichem Datentyp zugehören. Ein char in einem Vektor macht also alles andere auch zu Vektoren

Indizierung von Vektoren

x[2] #zweiter Wert out: 2
## [1] 2
x[c(TRUE,FALSE,TRUE)] #out: 1 3
## [1] 1 3

!! Achtung nicht 0-index !!

1.2.0.6 Matrizen

erzeugt mithilfe der matrix()

m <- matrix(1:6, ncol = 2) # 2 Spalten
# Matrix wird damit per Spalte besetzt
m <- matrix(1:6, ncol = 2, byrow = T)
m<- matrix(1:6, nrow = 3)

Indizierung von Matrizen mit [Zeile, Spalte]

m[1,1] #: 1
## [1] 1
m[2,] # 2  5 (gesamte zweite spalte )
## [1] 2 5

wichtige Funktionen: Transponieren: t(m) Diagonale: diag(m)

und wie bei Vektoren: alle Elemente selber Datentyp

1.2.0.7 Arrays

Ähnlich wie Matrizen , nur dimension > 2

x <- array(1:12, dim = c(2,3,2))
x[2,2,1]
## [1] 4

Indizierung Hier: [Zeile,Spalte,Element]

1.2.0.8 Liste

a <- list(4,"a",c(8,8,8)) 

Liste kann beliebige andere Objekte, auch unterschiedlicher Länge / Art speichern Indizierung mit a[[2]] -> 'a'

1.2.0.9 DataFrames

eine Art der besonderen Liste mit extra Funktionen, muss aber gleiche Länge haben! wie pandas.DataFrame()

mpg <- mpg
head(mpg) # first 10 rows
## # A tibble: 6 × 11
##   manufacturer model displ  year   cyl trans drv     cty
##   <chr>        <chr> <dbl> <int> <int> <chr> <chr> <int>
## 1 audi         a4      1.8  1999     4 auto… f        18
## 2 audi         a4      1.8  1999     4 manu… f        21
## 3 audi         a4      2    2008     4 manu… f        20
## 4 audi         a4      2    2008     4 auto… f        21
## 5 audi         a4      2.8  1999     6 auto… f        16
## 6 audi         a4      2.8  1999     6 manu… f        18
## # … with 3 more variables: hwy <int>, fl <chr>,
## #   class <chr>
#Vektor Hersteller
hersteller <- mpg$manufacturer
x <- data.frame(hersteller,mpg$cyl) # 2 Zeilen gleichen Datensatzes

1.2.0.10 Tibbles

neue Art von Datentyp, Dataframe nur noch fancier, noch mehr funktionen

tibble()
## # A tibble: 0 × 0

mpg ist ein Tibble Indizierung mit $ oder `mpg[[“year”]]

1.3 Operatoren

1.3.0.1 Vergleichs-operatoren

  • == Gleichheit
  • != Ungleichheit
  • >, >= Größer / Größer Gleich
  • <, <= Kleiner / Kleiner Gleich
  • ! Nicht

Beispiel

5 < 3 # out: FALSE
## [1] FALSE

1.3.0.2 logische Operatoren

& : AND | : OR ! : NOT && : AND, aber immer nur auf erste Elemente der Vektoren werden verglichen || : OR, aber auch nur erste Elemente

Beispiel

1 & 1 # TRUE
## [1] TRUE
1 | 0 # TRUE
## [1] TRUE
0 | 0 # FALSE
## [1] FALSE
a <- c(TRUE, FALSE, FALSE)
b <- c(FALSE, TRUE, TRUE)
a && b # FALSE, da nur TRUE und FALSE verglichen
## [1] FALSE
a || b # TRUE
## [1] TRUE

1.4 Datenarbeit

wir nutzen den datensatz mpg aus tidyverse

mpg <- mpg
head(mpg) # first 10 rows
## # A tibble: 6 × 11
##   manufacturer model displ  year   cyl trans drv     cty
##   <chr>        <chr> <dbl> <int> <int> <chr> <chr> <int>
## 1 audi         a4      1.8  1999     4 auto… f        18
## 2 audi         a4      1.8  1999     4 manu… f        21
## 3 audi         a4      2    2008     4 manu… f        20
## 4 audi         a4      2    2008     4 auto… f        21
## 5 audi         a4      2.8  1999     6 auto… f        16
## 6 audi         a4      2.8  1999     6 manu… f        18
## # … with 3 more variables: hwy <int>, fl <chr>,
## #   class <chr>
#Vektor Hersteller
hersteller <- mpg$manufacturer

Dollarsign = einzelne Spalte des Tibbles / DataFrames

Prüfen, ob irgendwas NAs enthält

table(is.na(hersteller)) #out: FALSE 234
## 
## FALSE 
##   234
# Test mit Jahr
year <- mpg$year
table(year > 2000) #out: FALSE 117 ; TRUE 117
## 
## FALSE  TRUE 
##   117   117
sum(year > 2000) #out: 117
## [1] 117

1.4.0.1 Übungsblatt

Aufgabe 1

usa <- data.frame(USArrests)
##1
#a)
mode(usa$Murder)
## [1] "numeric"
#b)
usa$Murder <- as.character(usa$Murder)
#c)
states <- rownames(usa)
rownames(usa) <- NULL
#d)
usa_m <- as.matrix(usa) #Alles wird zum Character
usa_tibble <- as_tibble(usa) # Nichts aendert sich

#e) in listof-list umwandeln ?!!! ahh nur die einzelnen Spalten 
as.list(as.data.frame(t(usa))) 
## $V1
## [1] "13.2" "236"  "58"   "21.2"
## 
## $V2
## [1] "10"   "263"  "48"   "44.5"
## 
## $V3
## [1] "8.1"  "294"  "80"   "31.0"
## 
## $V4
## [1] "8.8"  "190"  "50"   "19.5"
## 
## $V5
## [1] "9"    "276"  "91"   "40.6"
## 
## $V6
## [1] "7.9"  "204"  "78"   "38.7"
## 
## $V7
## [1] "3.3"  "110"  "77"   "11.1"
## 
## $V8
## [1] "5.9"  "238"  "72"   "15.8"
## 
## $V9
## [1] "15.4" "335"  "80"   "31.9"
## 
## $V10
## [1] "17.4" "211"  "60"   "25.8"
## 
## $V11
## [1] "5.3"  " 46"  "83"   "20.2"
## 
## $V12
## [1] "2.6"  "120"  "54"   "14.2"
## 
## $V13
## [1] "10.4" "249"  "83"   "24.0"
## 
## $V14
## [1] "7.2"  "113"  "65"   "21.0"
## 
## $V15
## [1] "2.2"  " 56"  "57"   "11.3"
## 
## $V16
## [1] "6"    "115"  "66"   "18.0"
## 
## $V17
## [1] "9.7"  "109"  "52"   "16.3"
## 
## $V18
## [1] "15.4" "249"  "66"   "22.2"
## 
## $V19
## [1] "2.1"  " 83"  "51"   " 7.8"
## 
## $V20
## [1] "11.3" "300"  "67"   "27.8"
## 
## $V21
## [1] "4.4"  "149"  "85"   "16.3"
## 
## $V22
## [1] "12.1" "255"  "74"   "35.1"
## 
## $V23
## [1] "2.7"  " 72"  "66"   "14.9"
## 
## $V24
## [1] "16.1" "259"  "44"   "17.1"
## 
## $V25
## [1] "9"    "178"  "70"   "28.2"
## 
## $V26
## [1] "6"    "109"  "53"   "16.4"
## 
## $V27
## [1] "4.3"  "102"  "62"   "16.5"
## 
## $V28
## [1] "12.2" "252"  "81"   "46.0"
## 
## $V29
## [1] "2.1"  " 57"  "56"   " 9.5"
## 
## $V30
## [1] "7.4"  "159"  "89"   "18.8"
## 
## $V31
## [1] "11.4" "285"  "70"   "32.1"
## 
## $V32
## [1] "11.1" "254"  "86"   "26.1"
## 
## $V33
## [1] "13"   "337"  "45"   "16.1"
## 
## $V34
## [1] "0.8"  " 45"  "44"   " 7.3"
## 
## $V35
## [1] "7.3"  "120"  "75"   "21.4"
## 
## $V36
## [1] "6.6"  "151"  "68"   "20.0"
## 
## $V37
## [1] "4.9"  "159"  "67"   "29.3"
## 
## $V38
## [1] "6.3"  "106"  "72"   "14.9"
## 
## $V39
## [1] "3.4"  "174"  "87"   " 8.3"
## 
## $V40
## [1] "14.4" "279"  "48"   "22.5"
## 
## $V41
## [1] "3.8"  " 86"  "45"   "12.8"
## 
## $V42
## [1] "13.2" "188"  "59"   "26.9"
## 
## $V43
## [1] "12.7" "201"  "80"   "25.5"
## 
## $V44
## [1] "3.2"  "120"  "80"   "22.9"
## 
## $V45
## [1] "2.2"  " 48"  "32"   "11.2"
## 
## $V46
## [1] "8.5"  "156"  "63"   "20.7"
## 
## $V47
## [1] "4"    "145"  "73"   "26.2"
## 
## $V48
## [1] "5.7"  " 81"  "39"   " 9.3"
## 
## $V49
## [1] "2.6"  " 53"  "66"   "10.8"
## 
## $V50
## [1] "6.8"  "161"  "60"   "15.6"

Lösung für e) gefunden hier

Aufgabe 2

#a)
states[c(7,13,33:36,47)]
## [1] "Connecticut"    "Illinois"       "North Carolina"
## [4] "North Dakota"   "Ohio"           "Oklahoma"      
## [7] "Washington"
#b)
usa_m[c(2:10,17,24,38,48),c(2,4)]
##       Assault Rape  
##  [1,] "263"   "44.5"
##  [2,] "294"   "31.0"
##  [3,] "190"   "19.5"
##  [4,] "276"   "40.6"
##  [5,] "204"   "38.7"
##  [6,] "110"   "11.1"
##  [7,] "238"   "15.8"
##  [8,] "335"   "31.9"
##  [9,] "211"   "25.8"
## [10,] "109"   "16.3"
## [11,] "259"   "17.1"
## [12,] "106"   "14.9"
## [13,] " 81"   " 9.3"
#d)
murder_less_than_5 <- usa[usa$Murder < 5,]
#e)
extreme_pop_matrix <- usa[usa$UrbanPop >= 80 | usa$UrbanPop <= 50, ]
#f)
dist <- as.vector(rnorm(n=1000, mean=35, sd=10))