Skip to Tutorial Content

Mål og forberedelser

I denne arbeidsboken skal du lære:

  • Å regne i R.

  • Å opprette objekter.

  • Å bruke funksjoner.

  • Å jobbe med vektorer.

  • Å jobbe med data.

  • Å få hjelp i R.

MERK:

  • Når du skriver inn svar i boksene under må du ALLTID trykke “Run Code” eller cmd+enter på Mac, eller ctrl+enter på PC. R er ekstremt sensitiv til store og små bokstaver og andre skrivefeil, så vær oppmerksom på dette. Du får beskjed om du har skrevet riktig kode. Les oppgavene nøye og vær oppmerksom på objektnavn.

  • Tekst som kommer etter # leses ikke som kode, men som tekst. Vi bruker gjerne # for å legge til overskrifter og kommentarer i koden vår, som kan hjelpe med å gjøre den mer oversiktlig.

R som kalkulator

Enkel regning

Vi begynner med å skrive kode i feltet under for å gjøre en enkel utregning. R kan brukes som en kalkulator, som vi ser i koden under:

5 + 10
## [1] 15

I R bruker vi følgende symboler for å gjøre enkle utregninger:

  • +: addisjon
  • -: subtraksjon
  • *: multiplikasjon
  • /: divisjon

Skriv 4-2 og trykk “Run Code” i feltet under.

4-2

Som du ser så er det et felt hvor du skriver kode (her regnestykket) og et sted hvor R svarer på koden (output) – i dette tilfellet gir det deg svaret fire.

Bruk R som kalkutor for å finne ut hva 23 ganger 42 er.
23*42

Objekter

Det som er genialt i R er at vi kan lagre ting, som svar fra utregninger, variabler, hele datasett og mer, i objekter. Objekter er alle “ting” i R som kan inneholde noe annet.

Opprette objekter

Vi lager nye objekter ved å bruke R sin ‘assignment operator’ <-.

Vi skal i hovedsak forholde oss til to typer objekter; vektorer og funksjoner. Det er lettere å vise hva disse er ved hjelp av eksempler. La oss lage et objekt med informasjon om et tall. For å gjøre dette må vi først velge et objektnavn, så bruke <- og til slutt skrive hva objektet skal inneholde. De objektene vi oppretter velger vi selv navn på.

# Lager et objekt som inneholder et tall
tallet_ti <- 10

Vi kan også lagre outputen fra en regneoperasjon i et objekt. Under lager vi et objekt som heter objekt. Vi bruker <- for å tilføre objektet innhold. På høyreside av pilen legger vi til det objektet skal bestå av. I dette tilfellet svaret på 5+18.

# Oppretter et objekt som lagrer informasjonen 5+18
objekt <- 5+18

Når du har laget et objekt kan du bare skrive navnet på objektet og trykke “Run Code” og R vil vise deg innholdet.

Skriv objekt under og trykk Run Code. Hva får du opp?
objekt

Dersom du vil lagre tekst i et objekt, så må du skrive det som står på høyreside av pilen i anførselstegn/hermetegn:

hei <- "Hei! Dette er et objekt."
Skriv hei og kjør koden.
hei

Navngi objekter

Objektene kan du kalle akkurat hva du vil, men som vi skal se på senere er det noen retningslinjer som er lure å følge:

  • Navn bør bare inneholde små bokstaver, tall og _.

  • Ikke bruk et tall som første tegn.

  • Ikke bruk æ/ø/å.

  • Ikke bruk mellomrom.

  • Ikke bruk FALSE, TRUE, Inf, for, else, break, function eller andre funksjonsnavn.

Vær oppmerksom på at R er sensitiv til store og små bokstaver i objektnavn. Derfor, hvis du kaller et objekt “objekt” vil ikke R printe innholdet hvis du skriver “Objekt”. Det kan det være greit å holde seg til små bokstaver i objektnavn.

Lag et objekt som heter mitt_objekt. I objektet skal du lagre alle tall fra 1 til 50.
mitt_objekt <- 1:50
# Husk at du bruker kolon for å si til R "alle tall mellom" 

Merk at når du lagrer et objekt så får du ikke noe output når du trykker Run Code. For å se hva som er lagre i objektet må du skrive inn objektnavnet og kjøre koden.

Skriv inn objektnavnet mitt_objekt og trykk Run Code for å se innholdet.
mitt_objekt

Funksjoner

I tillegg til å skrive inn regnestykker manuelt i R, kan vi også bruke funksjoner for å gjøre utregninger. Man kan tenke på funksjoner som objekter som inneholder instruksjoner for å gjøre spesifikke operasjoner. Sagt på en annen måte så gir man funksjoner en input så får man tilbake en output.

Dersom vi ønsker å summere opp tall, kan vi bruke funksjonen sum. R vil da gi deg summen av tallene du oppgir som output.

sum(2,4)
## [1] 6

Argumenter

Vi kommer til å bruke mange forskjellige funksjoner for å gjøre ulike operasjoner i R. For å tilpasse funksjonene slik at R vet akkurat hva det er vi ønsker å gjøre, bruker vi argumenter. Alle funksjoner har argumenter. Hvis vi ikke spesifiserer noe for alle argumentene, vil de argumentene vi ikke har spesifisert noe for gjerne bli satt til en default. For å vite hvilke argumenter en funksjon tar og hva som eventuelt er default for de ulike argumentene, kan man sjekke hjelpfilen til funksjonen.

Her er det også viktig å merke seg, at avhengig av hva slags verdier vi gir en funksjon, så kan det kreves at vi fyller ut spesifikke argumenter for at funksjonen skal kunne kjøres. Dvs. hvis vi ikke fyller ut et eller flere argumenter, vil disse settes til default og dermed klarer ikke funksjonen å gjøre operasjonen den skal gjøre fordi den ikke har fått riktig informasjon om hvordan den skal håndtere verdiene vi har oppgitt.

I eksempelet under, lager vi først en vektor som inneholder NA (missing verdier) før vi prøver å finne gjennomsnittet til tallene i denne vektoren med mean().

# Lager vektor med tall
vektor <- c(NA, 5, 10, 12, 1, 6, 2, NA)

# Prøver å finne gjennomsnitt med mean()
mean(vektor)
## [1] NA

Her får vi som svar at gjennomsnittet til vektoren er NA. Dette betyr at R ikke klarer å finne gjennomsnittet på vektoren basert på informasjonen vi har oppgitt. Grunnen til dette er at mean() har et argument som heter na.rm, som indikerer om NA verdier skal fjernes før man regner ut gjennomsnittet. Dette er et logisk argument som enten tar verdien TRUE eller FALSE, og default er FALSE. Dermed må vi spesifisere at NA skal fjernes ved å skrive na.rm = TRUE for at operasjonen skal bli vellykket.

# Legger til na.rm = TRUE
mean(vektor, na.rm = TRUE)
## [1] 6

Vektorer

Vektorer er en grunnleggende datastruktur i R, som inneholder elementer av samme klasse. Det finnes to hovedtyper av vektorer: atomiske vektorer og lister. Atomiske vektors har kun verdier av en type, mens lister kan ha flere typer veridier, samt bestå av flere vektorer.

  • Atomic vector: logical, integer, double, character, complex, raw.
  • Lists: blanding.

Vi kan bruke funksjonen c() for å slå sammen en rekke verdier til en vektor.

Dersom vi ønsker å lage en vektor som inneholder alle tall fra en til hundre, må vi først gi vektoren (objektet) et navn. Så oppgir hva vektoren skal inneholde og forteller at dette innholdet skal legges inn i objektnavnet med assigner-pilen <-. Merk at kolon i R sier at jeg vil legge til alle tall fra 1 til 100.

en_til_hundre <- 1:100 
Skriv inn objektnavnet en_til_hundre under for å se innholdet
en_til_hundre

Vi kan lage et objekt som heter ‘navn’ og inneholder ulike navn ved hjelp av funksjonen c(). Her må vi skrive verdiene i hermetegn, ettersom dette er tekst (character). Det gjør vi på følgende måte:

navn <- c("Louisa", "Lise", "Eric", "Eli")

Skriv inn objektnavnet navn og kjør koden for å å se innholdet

navn

Lag ditt eget objekt som består av tallene 26, 27, 28, 29. Tallene skal ha samme rekkefølge som oppgitt i oppgaveteksten. Objektet skal hete alder. Husk at i R så trenger du ikke anførselstegn rundt tall og at du bruker komma for å skille mellom ulike verdier i objektene.

alder <- c(26, 27, 28, 29)
#Begynn med navnet på objektet, alder, etterfulgt av 'opprette-objekt-pilen'. Deretter skriver du c og så parentes. Inni parentesen skriver du hver av tallene i rekkefølgen over og skiller hvert tall med komma. 

Lag et nytt objekt som heter hjemby. Dette objektet skal bestå av følgende verdier: Stavanger, Oslo, Bergen og Skien. Husk at siden du skal skrive bynavn (altså bokstaver) så må disse være i anførselstegn.

hjemby <- c("Stavanger", "Oslo", "Bergen", "Skien")
#Begynn med navnet på objektet, hjemby, etterfulgt av 'opprette-objekt-pilen'. Deretter skriver du c og så parentes. Inni parentesen skriver du hver av byene i anførselstegn og i samme rekkefølge som over. Husk at hver by må ha egne anførselstegn og at du skiller hver by med komma.

Lag et til objekt som heter avstand_oslo. Dette objektet skal bestå av følgende verdier: 547, 0, 463, 132

avstand_oslo <- c(547, 0, 463, 132)

Regne med vektorer

Nå skal du prøve å kjøre noen funksjoner på objektene du har laget. Funksjoner er også objekter, men det blir først interessant når du holder på med litt mer avansert kode. La oss se om vi kan finne gjennomsnittet av objektene du lagd.

Med funksjonen mean() får vi gjennomsnittet for hele vektoren/objektet. Som oftest er det det vi ønsker, men om vi kun ønsket gjennomsnittet av noen utvalgte tall så er det også mulig ved hjelp av indeksering eller filtrering. Dette skal vi se mer på senere. For å regne ut gjennomsnittet av et objekt må vi skrive navnet på objektet i parentesen mean(objekt_navn/variabel)

Bruk funksjonen mean() til å regne gjennomsnittet av avstand_oslo

mean(avstand_oslo)
Bruk funksjonen mean() til å regne gjennomsnittet av alder.
mean(alder)

Å jobbe med data

I denne delen skal vi jobbe med data. Det vil si at vi skal jobbe med et objekt som består av flere rader (objservasjonsenheter) og flere kolonner (variable/vektorer).

Lage data

Noen ganger har vi lyst til å slå sammen data som er av forskjellige typer. I eksempelet vi har jobbet med til nå har vi data om alder, navn, hjemby og avstand fra hjemby til oslo for fire personer, og vi skal nå slå sammen disse fire vektorene til et datasett. For å gjøre dette bruker vi koden data.frame(). En dataframe består av flere kolonner, hvor hver kolonne er en vektor. Vektorene kan ha ulik klasse, og det kan for eksempel være en character vektor og en numerisk vektor i et datasett. Vi kan tenke på disse kolonnene som variabler.

Vi kan tenke på hver rad i en dataframe som en observasjon. En observasjon kan for eksempel være en person, en gruppe, et land i et gitt år eller en by. Når vi skal kjøre analyser i senere seminarer så vil vi som regel laste inn datasett/dataframes som andre har laget, men vi kan også lage dem selv. Du har allerede laget objekter/variabler. Det vi skal gjøre nå er å bruke koden data.frames() for å sy sammen alle objektene til et objekt med rader og kolonner.

Her er en oversikt over variablene. Det vi gjør med koden data.frames() er å gjøre hver av verdiene i ‘navn’ til en observasjon som har en verdi på de ulike vektorene: navn, alder, hjemby og avstand_oslo.

# Alle variablene vi ønsker å legge til i datasettet vårt
navn <- c("Louisa", "Lise", "Eric", "Eli")

alder <- c(26, 27, 28, 29)

hjemby <- c("Stavanger", "Oslo", "Bergen", "Skien")

avstand_oslo <- c(547, 0, 463, 132)

En viktig regel for dataframes er at alle vektorene må ha like mange rader med informasjon, eller lik lengde. For å sjekke lengden på vektoren så kan vi se i environment eller bruke funksjonen length().

length(navn)
## [1] 4

Sjekk lengden til variablene alder, hjemby og avstand_oslo.

Vi ser at alle vektorene har samme lengde (4). Vi lager datasettet ved hjelp av funksjonen data.frame(). Når vi bruker den koden lager vi også et objekt. Jeg kaller det mine_data. Inni koden skriver jeg objektnavnene til variablene vi har laget.

mine_data <- data.frame(navn, alder, hjemby, avstand_oslo)

Vise data

Vi kan utforske datasettet vi har lagd nærmere ved å bruke View() (obs! stor V) eller ved bare skrive og kjøre navnet på datasettet.

# Syntaks for View()
view(mine_data)
Skriv mine_data for å se nærmere på datasettet.
mine_data

Regne med data

Til nå så har vi bare skrevet navnet på vektoren for å hente ut informasjon. Nå som vi har det i en dataframe, må vi først velge denne og så kolonnen. En mer vanlig måte å hente ut kolonner på er med $.

Her skriver jeg først navnet på dataframen, og så variabelen:

mine_data$navn 
## [1] "Louisa" "Lise"   "Eric"   "Eli"

Når du bruker funksjer, som f.eks mean() må du skrive navnet på datasett etterfulgt av $ og deretter navnet på variabelen du ønsker å regne ut gjennomsnittet på. Du må altså skrive mean(navn_på_dataobjekt$navn_på_variabel.

Regn ut gjennomsnittet av alder fra datasettet mine_data.
mean(mine_data$alder)
# Husk at vi nå jobber med datasett og da må du inkludere navnet på datasettet etterfult av dollartegn ($) og deretter variabelen i datasettet du ønsker å hente frem.

En annen måte og hente ut informasjon om gjennomsnittet og mye annet er ved å bruke summary() funksjonen.

summary(mine_data$alder)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   26.00   26.75   27.50   27.50   28.25   29.00

summary() kan også brukes for å hente ut informasjon om alle vektorene/variablene i et datasett.

summary(mine_data)
##      navn               alder          hjemby           avstand_oslo  
##  Length:4           Min.   :26.00   Length:4           Min.   :  0.0  
##  Class :character   1st Qu.:26.75   Class :character   1st Qu.: 99.0  
##  Mode  :character   Median :27.50   Mode  :character   Median :297.5  
##                     Mean   :27.50                      Mean   :285.5  
##                     3rd Qu.:28.25                      3rd Qu.:484.0  
##                     Max.   :29.00                      Max.   :547.0

Vi kommer tilbake til summary() i senere arbeidsbøker.

Hjelp i R

Hvis du vil lære mer om en kode eller et annet objekt i R kan du bruke ? etterfulgt av koden/funksjonen du vil lære mer om, som f.eks ?sum

Skriv ?sum under å se hva som kommer opp
?sum

Her får du opp en hjelpefil som beskriver hvordan du bruker funksjonen. Du kan bruke ? etterfulgt av navnet på alle funksjoner i R og du vil få opp en beskrivelse. Du kan også skrive ? etterfulgt av navn på datasett som vi skal jobbe med senere for å få en beskrivelse av datasettet utover den som står i arbeidsboken. Hjelpefilene blir lettere å lese etterhvert som du har kommet litt inn i syntaksen man bruker i R. Så vær tålmodig.

Neste arbeidsbok

Introduksjon til R

Master i statsvitenskap — R-forberedelse

Eli Sofie Baltzersen, Louisa Boulaziz, Bjørn Høyland, Eric Nilsen, Lise Rødland

8/9/2021