Kapitel 2 Introduktion till R
R är ett programmeringsspråk för dataanalys. Men R sträcker sig långt utöver enkla databearbetningar och statistisk modellering. Tack vare ett aktivt community har det utvecklats en stor mängd paket för att lösa många av de olika uppgifter en dataanalytiker kan tänkas ställas inför.
R kan i sin enklaste form användas som en miniräknare med +
, -
, /
eller *
.
Exempelvis:
## [1] 104
Eller:
## [1] 22
Beräkningar, eller alla former av manipuleringar kan sparas i så kallade objekt
.
Exempelvis kan vi spara en av ovanstående beräkningar i objektet x
med <-
som kallas för the assign operator.
## [1] 104
Pilen <-
kan även vändas på ->
## [1] 104
Du kan spara flera värden i ett objekt genom att omsluta dem med funktionen c()
och separatera med ,
(c står för combine). Då kallas objektet för en vector
.
## [1] 4 104 20
Objekt och vektorer är inte begränsade till numeriska värden utan kan även innehålla text.
## [1] "hej" "jag" "älskar" "r"
Vi kan dock inte blanda text och numeriska värden. Då kommer R att tolka det som text.
## [1] "1" "5" "hej" "6"
2.1 Saknade värden (missing values)
Ett vanligt fenomen i data från verkligheten är saknade värden. Saknade värden representeras i R med NA
.
NA
är inte noll. Det är inte heller ett värde. Det är helt enkelt en indikation på att vi inte vet vilket värde som ligger där.
Det här upplevde i alla fall jag som lite förvirrande till en början.
Om vi har en vektor med NA
:
Och kollar vilka värden som är större än 2.
## [1] TRUE NA FALSE TRUE
Så ser vi att vår observation med NA
inte är TRUE
eller FALSE
utan helt enkelt NA
.
Om vi vill kolla vilka värden som är NA
borde vi kunna göra samma sak:
## [1] NA NA NA NA
Det här svaret känns kanske inte intuitivt men det här beror på att vi helt enkelt inte vet. Det går inte att utvärdera om x
är NA
.
Vi kan illustrera med ett exempel:
## [1] NA
Är Filips ålder densamma som Helenas ålder för att vi saknar värdet? Nej, det går inte att veta.
Därför använder man i R istället is.na()
för att undersöka om något är NA
.
## [1] FALSE TRUE FALSE FALSE
NA
är ett vanligt argument i funktioner. Ska vi exempelvis beräkna medelvärdet på vår vektor x som har NA
i sig så får vi:
## [1] NA
Eftersom vi saknar ett värde kan vi omöjligen veta vad medelvärdet för x
är. Det saknade värdet kan vara vilken siffra som helst.
Därför kan vi i funktionen mean()
välja att helt bortse från det saknade värdet:
## [1] 18.66667
2.2 R är ett funktionellt programmeringsspråk
Vi använder oss hela tiden av funktioner i R. Vi kan skriva egna funktioner men oftast använder vi färdiga funktioner från paket med funktioner.
Funktionell programmering är bra för dataanalys. Ofta jobbar vi med data som vi vill manipulera om och om igen och funktioner är ett bra sätt att göra det på. På många sätt liknar R därför Excel som också jobbar mycket med funktioner.
2.2.1 Funktioner
Precis som i Excel finns det flertalet inbyggda statistiska och matematiska funktioner i R:
mean()
median()
sd()
- …osv
Det finns också matematiska funktioner
log()
sin()
cos()
- …osv
2.2.2 Dokumentation av funktioner
Funktioner innehåller också dokumentation om hur de fungerar.
För att komma åt dokumentation skriver du ett frågetecken innan funktioner.
2.2.3 Övning
- Använd några av R:s statistiska funktioner på en numerisk vektor
2.3 Data frames
- Det vanligaste formatet i R för dataanalys
- En data.frame är en rektangulär tabell med en eller flera kolumner
year | month | day | dep_time | sched_dep_time | dep_delay | arr_time | sched_arr_time | arr_delay | carrier | flight | tailnum | origin | dest | air_time | distance | hour | minute | time_hour |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2013 | 1 | 1 | 517 | 515 | 2 | 830 | 819 | 11 | UA | 1545 | N14228 | EWR | IAH | 227 | 1400 | 5 | 15 | 2013-01-01 05:00:00 |
2013 | 1 | 1 | 533 | 529 | 4 | 850 | 830 | 20 | UA | 1714 | N24211 | LGA | IAH | 227 | 1416 | 5 | 29 | 2013-01-01 05:00:00 |
2013 | 1 | 1 | 542 | 540 | 2 | 923 | 850 | 33 | AA | 1141 | N619AA | JFK | MIA | 160 | 1089 | 5 | 40 | 2013-01-01 05:00:00 |
2013 | 1 | 1 | 544 | 545 | -1 | 1004 | 1022 | -18 | B6 | 725 | N804JB | JFK | BQN | 183 | 1576 | 5 | 45 | 2013-01-01 05:00:00 |
2013 | 1 | 1 | 554 | 600 | -6 | 812 | 837 | -25 | DL | 461 | N668DN | LGA | ATL | 116 | 762 | 6 | 0 | 2013-01-01 06:00:00 |
2013 | 1 | 1 | 554 | 558 | -4 | 740 | 728 | 12 | UA | 1696 | N39463 | EWR | ORD | 150 | 719 | 5 | 58 | 2013-01-01 05:00:00 |
Vi kan enkelt skapa våra egna data.frames.
## random_number
## 1 -1.6992399
## 2 0.9755193
## 3 -1.4807371
## 4 -1.2570500
## 5 -0.1507325
En data.frame är ett bra sätt att spara en eller flera vektorer. De måste då vara exakt lika långa.
## x y
## 1 1 hej
## 2 2 på
## 3 3 dig
Om du sparar vektorerna som två objekt kan du enkelt göra dem till den data.frame.
## siffror ord
## 1 5 vad
## 2 1 var
## 3 2 det
## 4 5 där
2.4 Paket
Vi nämnde tidigare att vi kan spara funktioner i så kallade paket. Paket är precis det. Ett sätt för oss att spara och lätt komma åt funktioner i R. Paket som genomgår viss granskning läggs upp på CRAN
(The Comprehensive R Archive Network). Men man kan även skapa egna paket och lägga upp på Github eller spara på sin egen dator.
För att installera ett paket från CRAN
använder du funktionen install.packages("paketnamn")
.
När du sedan laddat ner paketet behöver du ladda det i R genom library(paketnamn)
.
2.4.1 Övning
Paketet tidyverse
är nedladdat åt dig. Ladda paketet med library()
2.5 tidyverse and friends
tidyverse är en samling paket för att lösa olika typer av problem inom dataanalys.
De har en gemensam filosofi: paketen och dess funktioner är i första hand designade för att människor ska använda dem.
Det gör att de av många upplevs som enklare att använda och mer konsekventa än det som kallas base R . D.v.s. R utan några paket.
Vi kommer här att fokusera på tidyverse
eftersom det är ett bra sätt att komma igång med R.
2.6 Workflow i R
I R så jobbar vi med så kallade R-projects. I Rstudio kan du klicka på file -> New Project -> New Directory -> Create Project för att skapa ett nytt projekt. Genom att skapa ett projekt vet R alltid var filerna för det projektet är och det blir enklare för dig att jobba.
2.7 Att skriva kod i R
När du skriver kod gör du det dels med hänsyn dels till andra men framför allt med hänsyn till ditt framtida jag. Koden ska med andra ord vara enkel att läsa.
Därför kan det vara bra att följa en stilguide.
Jag följer stilguiden från tidyverse
som säger att:
- Namnge alltid variabler, objekt m.m. med små bokstäver.
Exempelvis är det enklare att läsa:
I kontrast till:
Vi strävar dessutom efter att skriva kod som vi skriver text, med mellanrum mellan ,
och ord.
Det här är enklare att läsa:
Än det här:
När vi sparar filer så försöker vi följa den här syntaxen. Därför ska du inte ha mellanrum i när du sparar filer. min-r-fil.R
är bra men min R fil.R
är dåligt.
När vi skriver kod försöker vi dessutom inte att skriva för lång uttryck:
Det här är mycket svårare att läsa:
Än det här:
2.8 Rmarkdown
Rmarkdown är ett format som tillåter dig varva r-kod med skriven text. Du kan sedan rendera filen till antigen HTML, PDF, Word, PowerPoint samt en rad andra format.