Skip to Tutorial Content

Mål og forberedelser

Velkommen til første arbeidsbok. I denne delen skal vi lære hvordan vi kan bruke R som en kalkulator. Vi kan få R til å utføre enkle regne operasjoner som 1+1 og regne ut svaret for oss. Vi skal også lære hvordan vi oppretter objekter og hvordan vi kan sjekke hvilket “målenivå” objektene har. Til slutt blir det en kort introduksjon til hvordan vi jobber med data i R.

I denne arbeidsboken skal vi lære:

  • Å regne i R. Enkle utregninger med + og - og sum()

  • Hvordan åpne hjelpefiler vha av ?funksjonsnavn

  • Opprette objekter. Lage vektorer/variable vha av R sin ‘assignment operator’ <-

  • Hva klasser i R er (målenivå på vektorer) og bruke koder for å finne klassen vha class() og is.klassenavn() og ‘lengden’ på inholdet vha length()

  • Opprette datasett vha av data.frame() og hvordan vi jobber med data i R

  • Å bruke R til å regne gjennomsnitt vha mean() og få oversikt over data vha summary()

Husk at 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

Kjøre enkle koder

Vi begynner rett på med å skrive kode!

Skriv 2+2 og trykk på “Run Code” i feltet under.
2+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.

Skriv 2*3 og trykk på Run Code i feltet under.
2*3

Nå har vi utført to enkle regneoperasjoner. Vi kan også bruke funksjoner i R for regne ut, f.eks sum(). Vi kan bruke funksjonen sum() til å regne ut 2+4 slik som dette:

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

Da gir R deg svaret som output. Koden sum() kan også dele, trekke fra og multiplisere. sum() kan også ta andre objekter som vi skal lære mer om senere i arbeidsboken. 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.

En annen nyttig ting å vite i R er at ved å bruke # så kan du kommentere i scriptet i ditt. Dette er mest relevant når du jobber i R studio med egne oppgaver og er ikke noe du trenger å vite for å løse oppgavene i disse arbeidsbøkene, men er relevant hvis du ønsker å kommentere når du lager egne script.

Opprette objekter

I denne delen skal vi opprette objekter. Det som er genialt i R er at vi kan lagre ting, som utregninger, variable, hele datasett og mer, i objekter. Et eksempel på hva et kan være er svaret fra en utrengning. Vi kan altså lagre svar fra utregninger i “objekter”. Objekter er alle “ting” i R som kan inneholde noe annet. Dette blir kanskje mer tydelig etterhvert som du fortsetter med R. Noen objekter laster vi inn ved hjelp av pakker, noen er bygd inn i R og andre kommer vi til å lage selv. Dere kan tenke på for eksempel datasett, funksjoner og modellresultater som mulige 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å.

Vi skal nå opprette objekter i R.

Her lager jeg et objekt som lagrer innformasjonen 5+18

objekt <- 5+18

Nå har jeg laget et objekt som heter objekt. Jeg bruker <- for å tilføre objektet innhold. På høyreside av pilen legger jeg til det objektet skal bestå av. I dette tilfellet svaret på 5+18. Når du har laget et objekt kan du bare skrive navnet på objektet og trykke på “Run Code” og R vil vise deg innholdet.

Skriv ordet objekt under og trykk på Run Code. Hva får du opp når du skriver objekt?
objekt

Du får opp 23 fordi 5 + 18 = 23. Vær oppmerksom på at du kan selv velge navn på objektet og at du kan lagre hva som helst inni det. Du kan også bare legge til tall som dette:

tall <- 10
tall
## [1] 10

Når du skriver navnet på objektet vil R printe innholdet.

Vi kan du legge til flere tall som dette:

en_til_hundre <- 1:100 

Dette objektet inneholder alle tall fra en til hundre. Merk at kolon i R sier at jeg vil legge til alle tall fra 1 til 100.

Skriv inn objektnavnet en_til_hundre under for å se innholdet
en_til_hundre

Som du ser vil da R liste alt innholdet i objektet. I dette tilfellet alle tall fra 1 til 100.

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 opperksom 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.

Nå skal du lage ditt eget objekt.

Kall objektet 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

Her printer R innholdet i objektet ditt.

Objekter i R

I denne delen skal vi lære videre om objekter og andre typer objekter som består av andre ting enn tall og utregninger. R kan håndtere mange ulike objekter som både består av tall og bokstaver og andre mulige kombinasjoner. Vi skal opprette flere objekter og lage det som i R kalles vektorer. Du kan gjerne tenke på en vektor som det vi kaller en variabel i STV1020. Objekter kan bestå av ulike ting, alt fra tall til bokstaver.

Fra forrige del lærte vi at <- brukes for å opprette objekter, at vi kan selv velge navn på objekene våre (men at vi bør unngå noen navn) og at objektene kan inneholde enkelttall, men også utregninger.

Dersom du vil lagre annen informasjon i objektet, som for eksempel bokstaver, så må du skrive det som står på høyreside av pilen i anførselstegn/hermetegn:

hei <- "louisa"
Skriv hei og kjør koden.
hei

Her printer R innholdet av hei som er “louisa”.

Vi kan legge til flere navn i objektet ‘navn’ ved hjelp av parenteser og c. Det gjør vi på følgende måte:

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

Her lager jeg et objekt som heter navn, men som inneholder fire forskjellige navn. Legg merke til at bokstav-verdier må være i anførselstegn.

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

Her lister R innholdet i objektet navn.

Lag ditt eget objekt som består av tallene 26, 27, 30, 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, 30, 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)

Nå har vi laget fire ulike variabler/vektorer:

  • navn som består av fire navn

  • alder som består av fire aldre i antall år

  • hjemby som består av fire bynavn

  • avstand_oslo som består av tall (avstand til Oslo fra de fire byene i hjemby i antall km).

I neste del skal vi bruke disse fire variablene til å lære mer om målenivå og regning i R.

Variabler og målenivå

I forrige del lagde du variabler/objekter. Disse variablene er “vektorer”. Det betyr at det er objekter som inneholder flere ulike verdier. Du har lagd variabler med tall og med bokstaver.

Du brukte følgende kode for å lage variabler:

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

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

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

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

Vi skal jobbe videre med disse vektorene/variablene. Vi skal i denne delen lære om ‘klasser’ og utføre flere regneoperasjoner.

Klasser i R

Vi kan lage vektorer/variabler med ulikt innhold som tall og bokstaver. Innholdet påvirker hva vi kan gjøre med vektoren. For eksempel så gir det ikke mening å regne ut gjennomsnittet av variabelen navn, mens vi kan fint regne gjennomsnittet av avstand_oslo. avstand_oslo viser antall km til Oslo fra de ulike hjembyene.

I R så er det klassen som bestemmer hva vi kan gjøre med en variabel og visse funksjoner krever at dataene er i visse klasser. Hovedklassene vi kommer til å bruke er; numeric/integer, character, logical og factor. Numeric er tall. De fleste mattefunksjoner krever at dataene er numeric. For å sjekke om noe er numeric kan vi bruke funksjonen is.numeric().

I forrige kapittel lagde vi et objekt som heter en_til_hundre. Objektet, består av alle tall fra en til hundre. Vi skal nå sjekke klassen på dette objektet med koden is.numeric().

is.numeric(en_til_hundre)
## [1] TRUE

Her ser vi at vi får opp “TRUE” som betyr at objektet en_til_hundre er numerisk. Dere vil kanskje kommer over klassen integer. Integer er en spesiell type numerisk vektor som kun består av hele tall, altså ikke desimaltall.

Vi kan også bruke funksjonen class() til å hente ut informasjon om klassen:

class(en_til_hundre)
## [1] "integer"

R oppgir at en_til_hundre er integer fordi den består kun av hele tall fra 1 til 100, og ikke f.eks 1.5 osv.

Husk at du har lagd variabler med navn:

  • navn

  • hjemby

  • alder

  • avstand_oslo

Bruk class() til å finne klassen til variablene hjemby, alder, og avstand_oslo.
# Husk at du må skrive class() for hver variabel. Begynn med class(hjemby) på rad 1, så class(alder) på rad 2 osv. Først når du har koden for å sjekke klassen til alle variablene vil du få riktig svar. 

I stad spurte vi R om objektet/variabelen en_til_hundre var numerisk. Spør om objektet navn er numerisk ved å bruke samme kode.

Spør om objektet navn er numerisk.
is.numeric(navn)

Her ser vi at R svarer FALSE fordi variabelen ikke er numerisk.

Du kan bruke class(), men du kan også spørre R om klassen er factor, character, logical eller integer som er de andre klassene i R. Dette gjør du vet å bytte ut numeric i is.numeric() med for eksempel factor så det blir is.factor().

Spør om objektet navn er ‘character’.
is.character(navn)
# Bytt ut numeric i `is.numeric()` med character så du får `is.character()`.

Regne med objekter

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 du skal kjøre analyser i senere arbeidsbøker eller oppgaver, 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.

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

alder <- c(26, 27, 30, 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 objektnavna til variablene du har lagd.

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

Vise data

Vi kan utforske datasettet vi har lagd nærmere ved å bruke View(). Husk her at R er sensitiv til store og små bokstaver, og her er det en stor V. Mellom parentesen skriver du navnet på dataobjektet ditt.

Kjør koden View() på objektet mine_data (merk at denne koden ikke vil kjøre i arbeidsboken, men du kan bruke den for å se på datasett i RStudio).
View(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   28.00   28.00   29.25   30.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 :28.00   Mode  :character   Median :297.5  
##                     Mean   :28.00                      Mean   :285.5  
##                     3rd Qu.:29.25                      3rd Qu.:484.0  
##                     Max.   :30.00                      Max.   :547.0

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

Arbeidsbok 1: Introduksjon til R

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

29/01/2024