Kapitel 4 Bilaga
4.1 Variabeltyper i R
De variabeltyper som finns i R är:
Beskrivning | Synonymer | typeof() | Exempel |
---|---|---|---|
Heltal | int, numeric | integer | -2, 0, 1 |
Reella tal | real, double, float, numeric | double | 1.03, 0.22 |
Komplexa tal | cplx | complex | 1+2i |
Logiska värden | booelan, bool, logi | logical | TRUE, FALSE |
Faktorer | factors | fctr | “Women” |
Datum | dates | date | “2017-02-04” |
Text | string, char | character | “Hello R!” |
flights
är en så kallad data.frame som egentligen är en samling vektorer. data.frame är den vanligaste data-typen i R för att arbeta med data.
Om du är nyfiken på att undersöka variabeltypen, eller klassen, på ett objekt eller en kolumn kan du använda funktionen class()
## [1] "numeric"
## [1] "character"
4.1.1 Vektorer
Vektorer är ett objekt i R som innehåller en eller flera element. En vektor kan endast innehålla en typ av variabel. Det vanligaste sättet att skapa en vektor är genom c().
4.1.2 Faktorvariabel
En annan typ av variabel är den såkallade faktorer, factor. Faktorer är kategoriska variabler som har olika nivåer som representerar fakta. Kön eller åldersgrupp är exempel på faktorer.
# minText är en textvektor
min_text <- c("A", "B", "A", "A")
# Konvertera minText till faktorvariabel med as.factor
min_faktor <- as.factor(min_text)
min_faktor
## [1] A B A A
## Levels: A B
## [1] "factor"
## [1] "A" "B"
4.1.3 Logik
Logiska värdena förekommer ofta i programmeringsvärlden. De logiska värdena i R är: TRUE, FALSE och NA.
4.1.3.1 Logiska operatorer
Logiska operatorer är de operatorer som bara kan användas på logiska vektorer. Det kallas även för boolsk algebra.
De viktigaste operatorerna i R visas i tabellen nedan.
Operator | Symbol i R |
---|---|
och (and) | & |
eller(or) | | |
icke(not) | ! |
4.1.3.2 Relationsoperatorer
Man vill ofta jämföra olika vektorer för att sedan indexera en datamängd. Detta görs med hjälp av relationsoperatorer som beskrivs nedan.
- Använder relationsoperatorer för att jämföra olika variabler.
- Relationsoperatorer returnerar logiska värde.
- Logiska värdena används sedan för indexering.
De vanligaste relationsoperatorer i R är följande:
Relationsoperatorer | Symbol i R |
---|---|
lika | == |
inte lika | != |
större än eller lika | >= |
mindre än eller lika | <= |
större än | > |
mindre än | < |
finns i | %in% |
4.1.4 Matriser
Matriser är också en av de vanligaste datastruktur i R. Den har två dimensioner, rader och kolumner. Likt som vektorer så kan matriser bara innehålla en typ av element. Det innebär att en matris kan endast vara en textmatris, numerisk matris eller logisk matris.
Matriserna kan skapas enkelt i R med funktionen matrix().
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
4.1.5 Data.frame
data.frame är en tabell som innehåller flera olika typer av variabler. Det är egentligen en samling av vektorer, därför kan en data.frame innehålla olika typer av vektorer som numeriska, logiska, textsträngar och faktorer.
För att skapa ett dataset i R används funktionen data.frame()
## num text logi
## 1 1 Text TRUE
## 2 2 Text TRUE
## 3 3 Text FALSE
Det finns ett antal förinstallerade data frames i R som du kan använda, det är även vanligt med paket vars enda syfte är att innehålla data.
För att kolla upp vilka data frames som finns förinstallerade kan du använda funktionen data().
data()
# För att läsa in en data.frame i Global Environment så skriv namn av data inom parentesen
data(iris)
iris
4.1.5.1 $
Även om dplyr
är att föredra för datamanipuleringar är det bra att veta att det går att göra samma manipuleringar i R men med en annan syntax. Då använder man i princip endast de inbyggda paketen (ofta kallade för base
) som laddas mer R.
En viktig operatör i base
-R är $
(extract-operator) som extraherar värden från objekt baserat på namn.
Exempelvis
## [1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
Med $
kan du också skapa nya variabler.
Eller döpa om variabler
4.1.5.2 colnames()
Om du vill ha dina kolumnnamn som en vektor kan du extrahera dessa med colnames()
.
## [1] "mpg" "cyl"
## [3] "disp" "hp"
## [5] "drat" "wt"
## [7] "qsec" "vs"
## [9] "am" "gear"
## [11] "carb" "ny_variabel"
## [13] "mpg_med_konstigt_namn"
Ibland kanske du har en lista på variabelnamn som du vill att data ska ha.
Då kan du applicera colnames()
med din vektor på din data.frame.
## A B C D E F G H I J K NA
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 3.500000
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 3.500000
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 5.700000
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 3.566667
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 2.337500
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 3.016667
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 1.787500
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 6.100000
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 5.700000
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 3.200000
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 2.966667
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 2.050000
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 2.162500
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 1.900000
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 1.300000
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 1.300000
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 1.837500
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 8.100000
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 7.600000
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 8.475000
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 5.375000
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 1.937500
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 1.900000
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 1.662500
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 2.400000
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 6.825000
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 6.500000
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 7.600000
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 1.975000
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 3.283333
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 1.875000
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 5.350000
## NA
## Mazda RX4 21.0
## Mazda RX4 Wag 21.0
## Datsun 710 22.8
## Hornet 4 Drive 21.4
## Hornet Sportabout 18.7
## Valiant 18.1
## Duster 360 14.3
## Merc 240D 24.4
## Merc 230 22.8
## Merc 280 19.2
## Merc 280C 17.8
## Merc 450SE 16.4
## Merc 450SL 17.3
## Merc 450SLC 15.2
## Cadillac Fleetwood 10.4
## Lincoln Continental 10.4
## Chrysler Imperial 14.7
## Fiat 128 32.4
## Honda Civic 30.4
## Toyota Corolla 33.9
## Toyota Corona 21.5
## Dodge Challenger 15.5
## AMC Javelin 15.2
## Camaro Z28 13.3
## Pontiac Firebird 19.2
## Fiat X1-9 27.3
## Porsche 914-2 26.0
## Lotus Europa 30.4
## Ford Pantera L 15.8
## Ferrari Dino 19.7
## Maserati Bora 15.0
## Volvo 142E 21.4
4.1.6 Listor
Listor är mer generell datastruktur i R. Man kan jämföra lista med en “låda” som innehåller olika datastrukter i R. En lista kan innehålla vektorer, data.frame och matriser, i olika längd och storlek, samtidigt.
För att skapa en lista används funktionen list()
# skapar vektorer a, b, c
a <- c("hej", "Kalle", "hejdå")
b <- c(TRUE, FALSE, FALSE, TRUE)
c <- 1:8
x <- list(a,b,c)
x
## [[1]]
## [1] "hej" "Kalle" "hejdå"
##
## [[2]]
## [1] TRUE FALSE FALSE TRUE
##
## [[3]]
## [1] 1 2 3 4 5 6 7 8
Ett mycket vanligt exempel på en lista är modellobjekt, dvs objektet man skapar när man anpassar en modell, till exempel en regressionsmodell. Hela resultatet från modellanpassningen ligger på en lista. Se nedan.
# Skapar en data.frame
ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
group <- gl(2, 10, 20, labels = c("Ctl","Trt"))
weight <- c(ctl, trt)
# Linjär regression.
lm <- lm(weight ~ group)
is.list(lm)
## [1] TRUE
## $names
## [1] "coefficients" "residuals" "effects" "rank"
## [5] "fitted.values" "assign" "qr" "df.residual"
## [9] "contrasts" "xlevels" "call" "terms"
## [13] "model"
##
## $class
## [1] "lm"
lm är en lista som innehåller bland annat regressions koefficienter, residualer, anpassade värden, mm.
4.1.7 Datum
I R uttrycks datum som antal dagar från 1970-01-01. Datum som kommer innan det skrivs ut som negativa värde.
## Time difference of 17757 days
## [1] "2018-08-14"
Sys.Date() ger dagens datum. date() returnerar dagens veckodag, datum och tid.
4.1.7.1 Olika datumformat
Symbol i R | Betydelse | Exempel |
---|---|---|
%d | dagnummer | 01-31 |
%a | förkortad veckodag | Mon |
%A | full veckodag | Monday |
%m | månad nummer | 00-12 |
%b | förkortad månad | Jan |
%B | full månad | January |
%y | 2 siffrig år | 18 |
%Y | 4 siffrig år | 2018 |
4.1.7.2 Formatera datum
## [1] "October 14 2019"
## [1] "01/01/70"
4.2 Indexering
Ibland är man bara intresserad av en kolumn eller enstaka värde. För att indexera eller plocka ut specifikt element ur ett objekt kan man använda sig av hackparentes [] eller dollar tecken $ och detta görs på olika sätt. ### Genom att ange positions nummer
## [1] 20
## [1] 15.0 20.0 20.0 23.0 1.2
Kör koden nedan för att se resultatet.
#Data.frame.
data(iris)
iris[, 1] # Väljer kolumn nummer 1
iris[1:5, c(1,2)] # Rad 1 till 5 på Kolumn 1 och 2
4.2.1 Genom att begränsa värden som man vill plocka ut
## [1] 7.0 1.2
## [1] 20 20
Kör koden nedan för att se resultatet.
4.2.2 Genom att ange namn av elementet eller kolumnen
Det går att namnge element i en vektor. Koder nedan visar hur man ger namn till varje element i en vektor. Efter att ha namngett vektorn kan du nu plocka ut värde med hjälp av namn.
# Sätter namn på respektive element i testScore
names(testScore) <- c("Zaida", "Anna", "Helena", "Per", "Filip", "Annelie")
testScore
## Zaida Anna Helena Per Filip Annelie
## 7.0 15.0 20.0 20.0 23.0 1.2
## Per
## 20
## Filip
## 23
# Kolumnen i en data.frame oftast har namn. Objekt som har 2 eller mer dimensioner kan vi använda oss av dollar tecken.
colnames(iris)
## [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width"
## [5] "Species"