Denne posten baserer seg på et kort kurs jeg holdt som introduksjon til R og Tidyverse. Posten inneholder slidene fra presentasjonen og går igjennom ulike deler av databehandling med dplyr. Posten tar både opp bruken av pipe “|>” og ulike sentrale “verb” fra dplyr slik som “filter”, “mutate” og “summarize”.
Denne posten er slidene til en innføring jeg holdt i R og Tidyverse. Jeg har holdt en liknende innføring tidligere, men jeg likte ikke den da jeg kom tilbake til den etter litt tid. Den forrige innføringen kan fortsatt leses for å få en god forståelse av R når man har kommet igang, men i denne posten forsøker jeg heller å komme til poenget litt raskere. Målet er at man raskt kommer til å få en følelse av hvordan R virker og særlig hvordan Tidyverse-logikken fungerer. Forhåpentligvis er det et større bidrag enn den forrige posten. Jeg har også skrevet en innføring i data.table som kan være relevant for folk som driver med stordata og registerdata. data.table
har en annen syntaks (kanskje mindre rett fram), men går som regel raskere enn Tidyverse
. Jeg bruker selv for det meste data.table
fordi det var det jeg lærte meg først.
R Core Team (1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024)
(Hvis ikke hadde ingen likt R..)
Det er krevende å lære R, så man hjernen lurer oss til å like det.
Laste ned begge via Software Center
Installere
Last ned og åpne denne fila
Se også nederst for flere ressurser
RStudio gjør det lettere å jobbe i R.
RStudio har mange ulike støttefunksjoner man ikke klarer seg uten
Ikke bruk R
aleine.
(Regnbueparenteser er lurt (Tools - Global options - Code - Display - Rainbow parentheses))
Syntaksfeltet ligger øverst til venstre som standard
Nederst til venstre ligger console. Der kommer outputen når man kjører kode
Nederst til høyre er det også flere faner:
Filer viser mappa dere er i (ikke sikkert det er mappa R forholder seg til)
Plot viser figurene dere har laget.
Packages viser alle pakkene dere har.
Help viser hjelpedokumenter
Viewer viser tabeller fra noen pakker
Parentesfeil (på med brillene!)
Kjøre enkeltelementer (merk og ctrl enter)
Ignorere feilmeldinger i blant, ofte bedre å undersøke koden enn å prøve å forstå..
Prosjekter gjør det lettere å laste inn filer
Prosjekter samler koden i en mappe
Prosjekter kan åpnes og man hopper tilbake til der man var
Prosjekter ligger helt øverst til høyre
Oppgave: Lage prosjekt
R sin syntaks er som Babels tårn
Alle har funnet sin egen måte å gjøre ting på
Tidyverse er et vellykka forsøk på å standardisere R
Tidyverse består av mange viktige pakker og bruker pipe til å kjede handlinger
Tidyverse forenkler arbeid i R
R er egentlig en forvokst kalkulator
Control + enter kjører den markerte koden eller kodelinja du står på
Dette er en rmarkdown-fil. R-koden lever i egne “chunker” som den rett under her
## Her kan man skrive R-kode
## Firkant lager kommentarer
## Stå under og trykk control (ctrl) + enter/linjeskift
1+1
1+
10
## eller denne:
(55
#Det kan til og med være kommentarer imellom
-1)
Man kan zoome inn i RStudio med ctrl + eller ut med ctrl -
Hvis alt blir feil kan man skru tilbake med ctrl 0
Vi kommer tilbake til pipe |>
eller %>%
men man lager den med ctrl shift M
Vi kjører alt inne i en chunk med Control alt c
Hva skjer hvis dere merker kode og trykker Control shift c?
install.packages("pakke")
. Vi bruker gåseøyne rundt pakkenavnet siden det er tekst.library(pakke)
eller library("pakke")
.## Merk linjene under og bruk control shift c
## til å fjerne kommentarfirkanten.
#Det ikke nødvendig å installere pakker
## når man allerede har gjort det.
## install.packages("here")
## install.packages("tidyverse")
Tidyverse består av ulike pakker for ulike handlinger
Når vi laster inn tidyverse
lastes alle inn samtidig.
I dag skal vi mest bruke:
dplyr
for å behandle dataggplot
for figurerreadr
for å lese inn datatibble
for datasettpurrr
for effektivisering av gjentakende kodefilter()
velger ut rader
arrange()
sorterer rader
select()
velger ut variabler
mutate()
lager nye variabler eller endrer de som allerede finnes
summarize()
brukes til å regne ut aggregerte verdier
reframe()
som over, men når det er flere verdier fra hver funksjon
group_by()
får de andre til operere som om dataene er gruppert
R har mange funksjoner som kan lese ulike typer datasett
haven
-pakka har for eksempel read_sav()
eller read_dta()
tidyverse
har readr
-pakka som kan laste inn mange andre formater
R vet ikke hvor filer ligger og misforstår ofte. Derfor bruker vi prosjekter og here
-pakka.
Da kan du ha fila i prosjektmappa og bruke here("filnavn")
for å finne fila i mappa
|>
|>
er en måte å kjede handlinger på|>
er standard-R sin pipe. Før måtte man bruke %>%
fra magrittr
-pakka|>
y()
|>
z()
leses: først data så gjør vi y så gjør vi zz(y(data)))
La oss si at vi er opptatt av utdanning
Vi har variabelen edyrs
som gir oss antall år utdanning
summarize()
lar oss regne ut aggregerte verdier
vi kan bruke funksjoner slik som mean()
eller median()
inne i
summarize(Gjennomsnitt=mean(eduyrs))
dplyr
-pakka fra tidyverse
inneholder en rekke funksjoner som hjelper oss få oversikt
glimpse()
og View()
er to måter
slice_head
og slice_tail
gir oss de første eller siste radene
slice_max
og slice_min
er også lure, men krever at man velger en variabel man vil ha max/min av
Hvis vi vil åpne i RStudio kan vi bruke View
eller trykke på et objekt i Environment som viser alle objekter vi har i minnet øverst til høyre
#Vi kan se topp
datasett |>
slice_head(n = 5)
## vi kan se bunn
datasett |>
slice_max(eduyrs,n = 5)
Kanskje ikke så relevant med hele datasettet?
filter()
lar oss velge rader med boleansk algebra
filter()
==
!=
>
<
&
|
!
hvis vi vil ha det motsatte:
!
For å lagre (innen R) må man bruke lagrepila (assign) <-
Da kan vi bruke avgrensningen igjen uten å skrive den hver gang
Knappen Alt
og knappen -
lager lagrepila som lagrer i objekter: objekt <-
kode du vil lagre
Hvordan kan vi lagre de norske dataene som datasett_no
?
Vi sjekker at datasett_no
dukker opp øverst til høyre ->
## Hvordan lagrer vi dette?
datasett |>
filter(cntry=="NO")
Et alternativ til å filtrere er å gruppere
Vi kan bruke group_by()
til å gruppere datasettet og få grupperte analyser
Når vi har grupperte data blir analysene i summarize()
gruppert etter hver gruppe
Regn ut gjennomsnittlig antall år utdanning for hvert land definert med cntry
datasett
#gruppér
#Regn ut snitt
Noen ganger har vi flere datasett som gjelder de samme svarene fordi noen syntes det var det lureste.
join
-funksjonene.join
-funksjonene varierer etter hvilke av datasettene vi vil beholde dataene fra:
left_join
beholder alle observasjonene i det venstre datasettet
right_join
beholder alle observasjonene i det høyre datasettet
full_join
beholder alle observasjonene i begge datasettene
inner_join
beholder bare observasjoner som er i begge datasettene
select()
gjør at vi kan hente ut enkeltvariabler
select(variabel)
Vi kan legge til `everything() etterpå om vi ønsker de andre variablene i tillegg
(eller bruke relocate()
for å flytte variabler først)
starts_with()
og ends_with()
er praktiske hjelpefunksjoner
Med case_when()
bruker man boleansk algebra til å spesifisere hvert enkelt nivå på den nye variabelen
Man begynner med påstanden og så setter man verdien for de som oppfyller påstanden etter en tilde ~
For eksempel edulvlb<300
skal få verdien “Grunnskole”
datasett_begge<- datasett_begge %>%
mutate(utdanning=factor(case_when(edulvlb<300~"Grunnskole",
edulvlb<400~"Videregående",
edulvlb<500~"Fagskole",
edulvlb<700~"Universitet og høyskole treårig",
edulvlb>700~"Master eller mer"),
levels=c("Grunnskole","Videregående","Fagskole","Universitet og høyskole treårig","Master eller mer")
))
## Fungerte det?
datasett_begge %>%
filter(cntry=="NO") %>%
group_by(edulvlb,utdanning) %>%
summarize(n())
n()
med group_by()
Rstudio har mange cheat sheets som er nyttige
Tidyverse har mye dokumentasjon og innføringer
Hver enkelt pakke har også egne innføringer. For eksempel dplyr og purrr
R for data science er skrevet av folkene bak tidyverse og ligger ute gratis
Noen ganger kommer tidyverse til kort. data.table er en pakke som gjør det enkelt å jobbe med store datasett (dvs. registerdata)
Jeg har skrevet en innføring i data.table her.
Heldigvis kan man bruke tidyverse-syntax med data.table hvis man bruker dtplyr eller tidytable
For attribution, please cite this work as
Solheim (2024, Sept. 12). Solheim: R-kurs 1: Enkel databehandling med tidyverse. Retrieved from https://www.oyvindsolheim.com/code/Tidyversekurs/
BibTeX citation
@misc{solheim2024r-kurs, author = {Solheim, Øyvind Bugge}, title = {Solheim: R-kurs 1: Enkel databehandling med tidyverse}, url = {https://www.oyvindsolheim.com/code/Tidyversekurs/}, year = {2024} }