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:
= 10 x
=> 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)
<- 5.5
x mode(x) # out: numeric
## [1] "numeric"
typeof(x) # out: double
## [1] "double"
## Integers: komplizierter
<- as.integer(3)
y typeof(y) # out: integer
## [1] "integer"
1.2.0.2 Character
Zeichenkette, wie string in python
<- "Hallo"
z 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
<- as.character(x)
x # out: '5.5' x
## [1] "5.5"
<- as.numeric(x)
x # out: 5.5 x
## [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)
<- c(1,2,3)
x mode(x) # out: 'numeric'
## [1] "numeric"
<- c(5,"a")
y # out: ('5', 'a') y
## [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
2] #zweiter Wert out: 2 x[
## [1] 2
c(TRUE,FALSE,TRUE)] #out: 1 3 x[
## [1] 1 3
!! Achtung nicht 0-index !!
1.2.0.6 Matrizen
erzeugt mithilfe der matrix()
<- matrix(1:6, ncol = 2) # 2 Spalten
m # Matrix wird damit per Spalte besetzt
<- matrix(1:6, ncol = 2, byrow = T)
m <- matrix(1:6, nrow = 3) m
Indizierung von Matrizen mit [Zeile, Spalte]
1,1] #: 1 m[
## [1] 1
2,] # 2 5 (gesamte zweite spalte ) m[
## [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
<- array(1:12, dim = c(2,3,2))
x 2,2,1] x[
## [1] 4
Indizierung Hier: [Zeile,Spalte,Element]
1.2.0.8 Liste
<- list(4,"a",c(8,8,8)) a
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
<- mpg$manufacturer
hersteller <- data.frame(hersteller,mpg$cyl) # 2 Zeilen gleichen Datensatzes x
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
<- c(TRUE, FALSE, FALSE)
a <- c(FALSE, TRUE, TRUE)
b && b # FALSE, da nur TRUE und FALSE verglichen a
## [1] FALSE
|| b # TRUE a
## [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
<- mpg$manufacturer hersteller
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
<- mpg$year
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
<- data.frame(USArrests)
usa ##1
#a)
mode(usa$Murder)
## [1] "numeric"
#b)
$Murder <- as.character(usa$Murder)
usa#c)
<- rownames(usa)
states rownames(usa) <- NULL
#d)
<- as.matrix(usa) #Alles wird zum Character
usa_m <- as_tibble(usa) # Nichts aendert sich
usa_tibble
#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)
c(7,13,33:36,47)] states[
## [1] "Connecticut" "Illinois" "North Carolina"
## [4] "North Dakota" "Ohio" "Oklahoma"
## [7] "Washington"
#b)
c(2:10,17,24,38,48),c(2,4)] usa_m[
## 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)
<- usa[usa$Murder < 5,]
murder_less_than_5 #e)
<- usa[usa$UrbanPop >= 80 | usa$UrbanPop <= 50, ]
extreme_pop_matrix #f)
<- as.vector(rnorm(n=1000, mean=35, sd=10)) dist