klasser och objekt

R: Från datahantering till visualisering

En avancerad kalkylator

  • R kan användas som en avancerad kalkylator, vilket möjliggör både enkla och komplexa beräkningar.
  • För att effektivt utföra beräkningar i R finns det vissa regler och principer att följa.
  • Dessutom finns det en del ovanliga operatorer som är bra att kunna för transformation av variabler senare i kursen.

Grundläggande beräkningar

1 + 2 # Addition
[1] 3
3 - 1    # Subtraktion
[1] 2
2 * 3 # Multiplikation
[1] 6
5 / 2    # Division
[1] 2.5
2^3 # Upphöjt till/exponent
[1] 8
5 %/% 2  # Heltalsdivision: Resultatet blir 2 (heltalsdelen)
[1] 2
5 %% 2 # Resten vid heltalsdivision: Resultatet blir 1 (x mod y)
[1] 1

Aritmetik - Operatorernas Prioritet

1 / 2 * 3   # vänster till höger
[1] 1.5
1 + 2 * 3 # prioritet: */ före +-
[1] 7
(1 + 2) * 3 # ändra ordning med parenteser
[1] 9
2^1 / 2 # prioritet av ^ före /
[1] 1
2^(1/2) # parenteser för att justera ordning
[1] 1.414214

Jämförelser

2 > 1 # större än
[1] TRUE
2 >= 2  # större än eller lika med
[1] TRUE
2 < 1 # mindre än
[1] FALSE
2 <= 1  # mindre än eller lika med
[1] FALSE
1 == 1 # == ... lika med
[1] TRUE
1 != 1 # != ... ej lika med
[1] FALSE

Logiska operatorer

(2 > 1) & (1 > 2) # &: logiskt OCH (Två är större än ett och ett är större än två.)
[1] FALSE
(2 < 1) | (1 < 2) # |: logiskt ELLER
[1] TRUE
(1 < 1) | !(1 < 1) # !: logisk negation
[1] TRUE

Objekt och klasser

Allt i R är ett objekt.

Varje objekt har en klass

  • Klasser i R definierar typen av objekt och bestämmer hur objektet beter sig i olika sammanhang.

  • Information om klassen hjälper oss att förstå vilka operationer som kan utföras på objektet

Klass Objekt
En mall eller ritning En konkret instans av en klass
Definierar egenskaper och beteenden Har egenskaper och kan utföra beteenden
Exempel: data.frame, numeric, list Exempel: df, num_vec, my_list

Klasser

  • Data Frames: Tabeller där varje kolumn kan ha olika datatyper. Används för att lagra dataset.
  • Tibbles: En modern version av data frames, ofta använd i tidyverse.
  • Vektorer eller variabler: En grundläggande datastruktur med element av samma typ.
    • Numerical: Numerisk: Tal, antingen heltal (int) eller reella tal med decimaler (dbl).
    • Character: Kategoriska data (chr), till exempel namn.
    • Factor: Kategorisk data lagrade som nivåer (fct). Användbart vid modellering.
    • Logical: TRUE eller FALSE värde (lgl).

Andra datastrukturer är:

  • listor En flexibel datastruktur som kan innehålla olika typer av objekt.
  • arrays Flerdimensionella strukturer som lagrar element av samma typ.
  • matrices En tvådimensionell datastruktur där alla element har samma typ.


Använd class() för att se vilken typ av objekt något är.

Objekt

I konsolen går det att utföra olika kalkulationer.

1 / 200 * 30
[1] 0.15
(59 + 73 + 2) / 3
[1] 44.66667

Men dessa är inte ett sparat objekt (i R miljön) innan pil (<-) symbolen används (går även att använda =, men de flesta förespråkar <-)

Ett sparat objekt kan återanvändas!

Objekt

x <- 3 * 4

För att visa detta objekt kan du skriva x i konsolen och trycka på enter alternativt markera objektet i ett script och använda tangentkombinationen cmd/ctrl + enter

x
[1] 12

Vad är x för typ av objekt?

class(x)
[1] "numeric"
length(x) # hur många element/värden innehåller objektet
[1] 1
is.vector(x) # Är ett element/värde fortfarande en vektor?
[1] TRUE

Numeriska vektorer

Vektorer

För att skapa en vektor som är längre än ett värde används c(), som betyder concatonate, men kan vara lättare att tänka på som combine.

primtal <- c(2, 3, 5, 7, 11, 13)
primtal
[1]  2  3  5  7 11 13

Multiplikation med vektorer

Om vi multilicerar vår nya vektor med ett tal kommer alla värden bli gånger det talet

# muliplar av primtalen
primtal * 2
[1]  4  6 10 14 22 26
primtal * primtal # Här multipliceras varje element i vektorn primtal med motsvarande element i samma vektor.
[1]   4   9  25  49 121 169

Multiplikation med vektorer

Multiplikation av en vektor med en kortare vektor

primtal * c(1, 2)
[1]  2  6  5 14 11 26

R använder en princip som kallas vektoråtervinning:

  • Den kortare vektorn (c(1, 2)) upprepas automatiskt för att matcha längden på den längre vektorn (primtal).

Beräkningar:

  • 2 * 1 = 2
  • 3 * 2 = 6
  • 5 * 1 = 5 (börjar om med 1)
  • 7 * 2 = 14
  • och så vidare
primtal + c(1, 2, 3, 4)
Warning in primtal + c(1, 2, 3, 4): longer object length is not a multiple of
shorter object length
[1]  3  5  8 11 12 15

Character vector/textvektorer

Character/textvektorer

  • Character vector/textvektor:
    • En grundläggande datatyp i R för att lagra textdata.
    • Representera kategoriska data som kön, utbildningsnivå, geografisk region.
    • Varje cell i en textvektor består av en sekvens av tecken (Strings).
  • Strings:
    • Enskilda element inom en teckenvektor.
    • Representerar text, som ord eller fraser.

x <- "nytt x värde"
x
[1] "nytt x värde"
frukter <- c("Äpple", "Banan", "Apelsin", "Druva")
frukter
[1] "Äpple"   "Banan"   "Apelsin" "Druva"  

Om man har båda text och siffror

y <- c("arton", 23, 27)
class(y)
[1] "character"

Sortera variabler

frukter
[1] "Äpple"   "Banan"   "Apelsin" "Druva"  
sort(frukter)
[1] "Apelsin" "Äpple"   "Banan"   "Druva"  
manader <- c(
  "Augusti",
  "Februari",
  "Januari",
  "December",
  "Mars",
  "Maj",
  "September",
  "April",
  "November",
  "Juni",
  "Oktober",
  "Juli"
)

sort(manader)
 [1] "April"     "Augusti"   "December"  "Februari"  "Januari"   "Juli"     
 [7] "Juni"      "Maj"       "Mars"      "November"  "Oktober"   "September"

Faktorer

Faktorer

  • En factor är en datastruktur i R som används för att hantera kategorisk data.

  • Representerar variabler som har ett begränsat antal unika värden, kallade nivåer/levels.

    • Statistisk analys: Säkerställer att kategoriska variabler behandlas korrekt i modeller.
    • Ordning: Möjlighet att definiera ordnade kategorier (t.ex. låg, medium, hög).
    • Effektiv lagring: Sparar minne genom att lagra data som numeriska index istället för teckensträngar.

Oordnade faktorer

  • Kategorier utan inbördes ordning.
  • Exempel: Färger (“Röd”, “Grön”, “Blå”) eller städer (“Stockholm”, “Göteborg”, “Malmö”).
farger <- factor(x = c("Röd", "Grön", "Blå", "Grön", "Röd"))
farger
[1] Röd  Grön Blå  Grön Röd 
Levels: Blå Grön Röd
städer <- factor(x = c("Stockholm", "Göteborg", "Malmö", "Göteborg"))
print(städer)
[1] Stockholm Göteborg  Malmö     Göteborg 
Levels: Göteborg Malmö Stockholm

Ordnade faktorer

  • Kategorier med en logisk ordning.
  • Månad (Januari<December).
  • Utbildningsnivåer (“Gymnasiet” < “Kandidatexamen” < “Master”).
factor(x = c("Gymnasiet", "Kandidatexamen", "Master"),
       ordered = TRUE)
[1] Gymnasiet      Kandidatexamen Master        
Levels: Gymnasiet < Kandidatexamen < Master

Oordnad

manader
 [1] "Augusti"   "Februari"  "Januari"   "December"  "Mars"      "Maj"      
 [7] "September" "April"     "November"  "Juni"      "Oktober"   "Juli"     
manader_factor <- factor(
  manader,
  levels = c(
    "Januari", "Februari", "Mars", "April",
    "Maj", "Juni", "Juli", "Augusti",
    "September", "Oktober", "November", "December"
  )
)

manader_factor
 [1] Augusti   Februari  Januari   December  Mars      Maj       September
 [8] April     November  Juni      Oktober   Juli     
12 Levels: Januari Februari Mars April Maj Juni Juli Augusti ... December
sort(manader_factor)
 [1] Januari   Februari  Mars      April     Maj       Juni      Juli     
 [8] Augusti   September Oktober   November  December 
12 Levels: Januari Februari Mars April Maj Juni Juli Augusti ... December

Ordnad

manader_ordered <- factor(
  manader,
  levels = c(
    "Januari", "Februari", "Mars", "April",
    "Maj", "Juni", "Juli", "Augusti",
    "September", "Oktober", "November", "December"
  ),
  ordered = TRUE
)

manader_ordered
 [1] Augusti   Februari  Januari   December  Mars      Maj       September
 [8] April     November  Juni      Oktober   Juli     
12 Levels: Januari < Februari < Mars < April < Maj < Juni < ... < December
sort(manader_ordered)
 [1] Januari   Februari  Mars      April     Maj       Juni      Juli     
 [8] Augusti   September Oktober   November  December 
12 Levels: Januari < Februari < Mars < April < Maj < Juni < ... < December

När spelar det roll?

  • Ordnade faktorer kan jämföra kategorier med operationer som < eller >.
  • Sortering av data, för både oordnad och ordnad faktor sorteras data efter levels-ordning.
  • Statistiska analyser, tex: vad ska referensen/jämförelsegruppen vara
  • Kontraster visas annorlunda för ordnade och oordnade faktorer
  • För att få rätt ordning i figurer fungerar både ordnade och oordnade faktorer

Rektangulär data

Data frame eller en tibble

Skapa vektorer

set.seed(123)  # För reproducerbarhet
namn <- sample(c("Anna", "Björn", "Cecilia", "David", "Elin", "Fredrik", "Gabriella", "Henrik", "Isabella", "Johan", "Karin", "Lars", "Maria", "Niklas", "Oskar"), 30, replace = TRUE)
alder <- sample(20:40, 30, replace = TRUE)
stad <- sample(c("Stockholm", "Göteborg", "Malmö", "Uppsala", "Lund", "Västerås", "Örebro", "Linköping", "Helsingborg", "Norrköping", "Jönköping", "Umeå", "Gävle", "Borås", "Eskilstuna"), 30, replace = TRUE)

Av dessa kan vi skapa en data frame

df <- data.frame(Namn = namn, Alder = alder, Stad = stad)
print(df)
        Namn Alder        Stad
1      Oskar    38  Eskilstuna
2      Oskar    23  Norrköping
3    Cecilia    33        Umeå
4     Niklas    36  Eskilstuna
5    Cecilia    30     Uppsala
6      Johan    26       Borås
7      Björn    40    Västerås
8    Fredrik    31   Jönköping
9      Karin    34   Linköping
10      Elin    29    Västerås
11     David    32    Västerås
12    Niklas    26      Örebro
13   Fredrik    28  Eskilstuna
14  Isabella    28   Stockholm
15     Johan    29    Västerås
16     Karin    40    Göteborg
17      Elin    26   Stockholm
18   Cecilia    40    Göteborg
19     Karin    25     Uppsala
20  Isabella    21       Gävle
21      Lars    24        Lund
22  Isabella    27    Västerås
23  Isabella    31  Eskilstuna
24     Maria    32       Malmö
25   Cecilia    37 Helsingborg
26    Henrik    20     Uppsala
27     Johan    25    Västerås
28 Gabriella    40 Helsingborg
29     Johan    34       Borås
30  Isabella    28 Helsingborg

Och även en tibble

library(tibble)
tb <- tibble(Namn = namn, Alder = alder, Stad = stad)
print(tb)
# A tibble: 30 × 3
   Namn    Alder Stad      
   <chr>   <int> <chr>     
 1 Oskar      38 Eskilstuna
 2 Oskar      23 Norrköping
 3 Cecilia    33 Umeå      
 4 Niklas     36 Eskilstuna
 5 Cecilia    30 Uppsala   
 6 Johan      26 Borås     
 7 Björn      40 Västerås  
 8 Fredrik    31 Jönköping 
 9 Karin      34 Linköping 
10 Elin       29 Västerås  
# ℹ 20 more rows

Skillnader:

  • Data frames visar hela datan direkt. Tibbles visar bara en förhandsvisning av data (10 rader).
  • Tibbles visar vilken datatyp varje vektor är.
  • Tibbles tillåter variabelnamn med mellanslag eller specialtecken (bra att undvika, men kan vara användbart vid skapande av figurer eller tabeller).

Funktioner

Funktioner

Funktioner är också objekt, antagligen den vanligaste objekttypen i R.

Många funktioner i R är namngivna på ett sätt som ger en bra ledtråd om vad de gör.

medelvärde <- mean(c(10, 20, 30))
medelvärde
[1] 20
summa <- sum(c(10, 20, 30))
summa
[1] 60
antal <- length(c(10, 20, 30))
antal
[1] 3
sorterade <- sort(c(30, 10, 20))
sorterade
[1] 10 20 30
seq(1, 10, by = 2)
[1] 1 3 5 7 9
rep(5, times = 3)
[1] 5 5 5
round(3.14159, digits = 2)
[1] 3.14

Argument i funktioner

Vad är argument?

  • Argument är indata som en funktion tar emot för att utföra sitt arbete.
  • De kan vara obligatoriska eller valfria.
  • Valfria argument har standardvärden som används om inget anges.

Exempel: Funktionen mean(), mean() tar flera argument, inklusive:

  • x: En vektor med numeriska värden (obligatoriskt).
  • na.rm: Ett logiskt värde som anger om NA-värden ska ignoreras (valfritt).
# Användning av mean() med endast det obligatoriska argumentet
en_vektor <- c(10, 20, 30, NA)
medel <- mean(en_vektor)
medel
[1] NA
# Användning av mean() med både obligatoriska och valfria argument
medel_utan_na <- mean(en_vektor, na.rm = TRUE)
medel_utan_na
[1] 20
# Inspektera argumenten i en funktion
args(mean)
function (x, ...) 
NULL
# Läs mer om funktionen
# ?mean

Går att använda diverse funktioner på textdata

frukter
[1] "Äpple"   "Banan"   "Apelsin" "Druva"  
stora_frukter <- toupper(frukter)
stora_frukter
[1] "ÄPPLE"   "BANAN"   "APELSIN" "DRUVA"  
substr(x = frukter, start = 1, stop = 3)
[1] "Äpp" "Ban" "Ape" "Dru"
substr(frukter, 1, 3)
[1] "Äpp" "Ban" "Ape" "Dru"

Byta klass på vektorer

Använd funktionerna as.character(), as.integer(), as.logical(), as.numeric() eller as.factor()

# Skapa en numerisk vektor
numeriskvektor <- c(1, 2, 3, 4, 5)
numeriskvektor
[1] 1 2 3 4 5
# Konvertera till textvektor
textvektor <- as.character(numeriskvektor)
textvektor
[1] "1" "2" "3" "4" "5"
# Konvertera tillbaka till numerisk
numeriskvektor2 <- as.numeric(textvektor)
numeriskvektor2
[1] 1 2 3 4 5
# Konvertera till faktor
faktorvektor <- as.factor(textvektor)
faktorvektor
[1] 1 2 3 4 5
Levels: 1 2 3 4 5
# Konvertera faktor tillbaka till numerisk korrekt
numeriskfrukt <- as.numeric(as.character(faktorvektor))
numeriskfrukt
[1] 1 2 3 4 5

Bra att veta

Vi skapar ett nytt objekt

R_kod <- 666

Sen vill vi undersöka vad objektet innehåller

# r_kod
#> Error: object 'r_kod' not found
  • Stor och liten bokstav spelar roll
  • andra saker som spelar roll är
  • inte ha mellanrum i variabelnam
  • variabelnamn ska inte börja med en siffra
  • Undvik tecken som !, @, #, $, %, osv. i variabelnamn.
  • Undantag: _ (understreck) och . (punkt) är tillåtna.
  • Använd tydliga och läsbara namn, som my_variable eller myVariable (camelCase).
  • Decimaltecken är alltid ., medan , används för att separera argument eller tal.

Bas R

Bas R operatorer

Dollartecken ($): Åtkomst till kolumner i data frames

  • Används för att få åtkomst till en specifik vektor i en data frame eller tibble med hjälp av vektorns namn.
data <- data.frame(A = c(1, 2, 3), B = c("X", "Y", "Z"))
data
A B
1 X
2 Y
3 Z
data$A  # Åtkomst till vektor 'A'
[1] 1 2 3

Enkla hakparenteser []:

  • Bevarar datastrukturen.
  • När du använder [] på en data frame eller en lista, behåller resultatet samma struktur som originalet.
  • Kan extrahera rader eller kolumner eller en specifik cell
data
A B
1 X
2 Y
3 Z
data[1, ]
A B
1 X
data[, 1]
[1] 1 2 3
data[1, 1]
[1] 1

Dubbla hakparenteser [[]]:

  • Extraherar specifika element utan att bevara strukturen.
  • Används för att hämta ett specifikt element ur en lista eller en kolumn från en data frame som en ren vektor.
list_data <- list(A = 1:3, B = c("X", "Y", "Z"))
list_data[[1]]
[1] 1 2 3
is.vector(list_data[[1]])
[1] TRUE

Skillnad mellan [] och [[]]:

  1. För listor:
    • [] returnerar en ny lista som innehåller det valda elementet (strukturen bevaras).
    • [[]] returnerar själva innehållet i det valda elementet.
list_data <- list(A = 1:3, B = c("X", "Y", "Z"))
list_data
$A
[1] 1 2 3

$B
[1] "X" "Y" "Z"
list_data[1]    # En lista med elementet A
$A
[1] 1 2 3
list_data[[1]]  # Själva innehållet i A (vektorn 1:3)
[1] 1 2 3

Skillnad mellan [] och [[]]:

  1. För data frames:
    • [] används för att välja rader eller kolumner medan man behåller data frame-strukturen.
    • [[]] används för att hämta en kolumn som en vektor.
data <- data.frame(A = c(1, 2, 3), B = c("X", "Y", "Z"))
data
A B
1 X
2 Y
3 Z
data[1]      # En data frame med första kolumnen
A
1
2
3
data[[1]]    # En vektor med värdena i första kolumnen
[1] 1 2 3