Grundläggande readr

Funktionerna tibble och read_*

  • read_* funktionerna är oerhört smarta, hjälper dig att läsa data och returnerar alltid en tibble.

  • En tibble en “snyggare” och ärligare data.frame

  • Blir detta som du tänkt dig?

data.frame(x=list("="="=", "B"="b"), # length 2
           y=c(1,2,3)) # length 3
tibble(x=list("="="=", "B"="b"),
       y=c(1,2,3))

data.frame(x=list("A"="a", "B"="b"),
           y=list("C"="c", "D"="d"))
tibble(x=list("A"="a", "B"="b"),
       y=list("C"="c", "D"="d"))

read_*

  • Snabbare än base-R read.*, används på samma sätt.

  • Gör inte strängar till faktorer.

  • Inget konstigt med dina kolumn-namn.

  • Beror inte på miljövariabler i ditt system, ex. ladda en fil i Windows behöver inte ge samma resultat som på linux/OSX.

  • Användbara argument col_types (colClasses från read.*) och guess_max

  • Vi kommer klaga om du använder read.csv istället för read_csv

readxl::read_excel

  • Paket readxl, excel filer är speciella
  • readxl::read_excel funktion för att läsa .xls/ .xlsx filer.
  • Unikt för read_excel argumentet sheet.
  • Kommer att användas i Homework 2.

Grundläggande dplyr

arrange ordnar raderna i data

mtcars <- tibble::rownames_to_column(mtcars, var = "model")
kable(head(arrange(mtcars, mpg), n = 4))
model mpg cyl disp hp drat wt qsec vs am gear carb
Cadillac Fleetwood 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4
Lincoln Continental 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4
Camaro Z28 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4
Duster 360 14.3 8 360 245 3.21 3.570 15.84 0 0 3 4

arrange ordnar raderna i data

kable(head(arrange(mtcars, mpg, disp), n = 4))
model mpg cyl disp hp drat wt qsec vs am gear carb
Lincoln Continental 10.4 8 460 215 3.00 5.424 17.82 0 0 3 4
Cadillac Fleetwood 10.4 8 472 205 2.93 5.250 17.98 0 0 3 4
Camaro Z28 13.3 8 350 245 3.73 3.840 15.41 0 0 3 4
Duster 360 14.3 8 360 245 3.21 3.570 15.84 0 0 3 4

filter välj ut rader (observationer)

#only those with manual transmission
kable(head(filter(mtcars, am == 1), n=4)) 
model mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1

filter välj ut rader (observationer)

kable(head(filter(mtcars, mpg < 30), n=4))
model mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1

mutate inför ny/transformerar variabel

kable(head(mutate(mtcars, lpm = 235 / mpg), n=4))
model mpg cyl disp hp drat wt qsec vs am gear carb lpm
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 11.19048
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 11.19048
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 10.30702
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 10.98131

select väljer ut variabler (kolumner)

kable(head(select(mtcars, model, mpg), n=4))
model mpg
Mazda RX4 21.0
Mazda RX4 Wag 21.0
Datsun 710 22.8
Hornet 4 Drive 21.4

Pipe %>%

Vilken funktion tar argumentet x=3?

df <- f1(f2(f3(f4(mtcars, x=2), x), x=3))

Detta är inte enkelt att läsa! Hur kan vi lösa det?

Pipe %>%

Bestäm \(h\circ g \circ f(a) = h(g(f(a)))\)

Tre olika sätt att räkna detta i R:

b <- f(a)
c <- g(b)
h(c)
h(f(g(a)))
a %>%  
    f %>%
    g %>% 
    h

Pipe %>%

mtcars <- mutate(mtcars, lpm = 235 / mpg)
mtcars <- filter(mtcars, am == 1)
ggplot(mtcars, aes(x = hp, y = lpm)) + geom_point()
ggplot(
    filter(
        mutate(mtcars, lpm = 235 / mpg)
        , am ==1), 
    aes(x = hp, y = lpm)) + geom_point()
mtcars %>% 
    mutate(lpm = 235 / mpg) %>% 
    filter(am == 1) %>% 
    ggplot(aes(x = hp, y = lpm)) + geom_point()
    

Grundläggande ggplot2

ggplot2

En statistisk plot har beståndsdelar

  • data
  • geom: typ av geometriska objekt (punkter, linjer, …)
  • cord: koordinatsystem
  • mapping: binder data till koordinatsysteets dimensioner/“aesthetics” (läge, färg, form, storlek, …)

ggplot2

En scatterplot

  • data: mpg och hp för ett antal bilar
  • geom: punkter
  • coord: Kartesiska
  • mapping: binder hp till position på x-axeln och mpgy-axeln

ggplot2

ggplot(data = mtcars, mapping = aes(x = hp, y = mpg)) + geom_point()

ggplot2 med lite färg och storlekar

ggplot(mtcars, 
       aes(x = hp, y = mpg, size = wt, color = cyl)) + 
    geom_point()

Vad är cyl?

ggplot2 typerna i mtcars spelar roll!

ggplot(mtcars, 
       aes(x = hp, y = mpg, size = wt, color = as.factor(cyl))) + 
    geom_point()

ggplot2 argument utanför aes men i ett geom

ggplot(mtcars, 
       aes(x = hp, y = mpg, size = wt)) + 
    geom_point(color = cyl)
# ERROR
ggplot(mtcars, 
       aes(x = hp, y = mpg, size = wt)) + 
    geom_point(color = "red")
# OK

aes tittar i mtcars men inte geom!

ggplot2

Försiktig med att återanvända namn i kolumner, variabler osv.

cyl <- "blue" 
ggplot(mtcars, 
       aes(x = hp, y = mpg, size = wt)) + 
    geom_point(color = cyl)

Error?