readr
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
readxl
, excel filer är speciellareadxl::read_excel
funktion för att läsa .xls
/ .xlsx
filer.read_excel
argumentet sheet
.dplyr
arrange
ordnar raderna i datamtcars <- 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 datakable(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 variabelkable(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 |
%>%
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?
%>%
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
%>%
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()
ggplot2
ggplot2
En statistisk plot har beståndsdelar
data
geom
: typ av geometriska objekt (punkter, linjer, …)cord
: koordinatsystemmapping
: binder data till koordinatsysteets dimensioner/“aesthetics” (läge, färg, form, storlek, …)ggplot2
En scatterplot
data
: mpg
och hp
för ett antal bilargeom
: punktercoord
: Kartesiskamapping
: binder hp
till position på x
-axeln och mpg
på y
-axelnggplot2
ggplot(data = mtcars, mapping = aes(x = hp, y = mpg)) + geom_point()
ggplot2
med lite färg och storlekarggplot(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?