Kapitel 5 Bilaga
5.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()
class(x)
## [1] "numeric"
class(text)
## [1] "character"
5.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().
# Numerisk vektor
<- c(1,4,7)
numvec
# Textvektor
<- c("Kalle", "Anka") charvec
5.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
<- c("A", "B", "A", "A")
min_text
# Konvertera minText till faktorvariabel med as.factor
<- as.factor(min_text)
min_faktor
min_faktor
## [1] A B A A
## Levels: A B
# För att undersöka klassen av vektorn minFaktor
class(min_faktor)
## [1] "factor"
# För att undersöka vilka unika värden finns på minFaktor
levels(min_faktor)
## [1] "A" "B"
5.1.3 Logik
Logiska värdena förekommer ofta i programmeringsvärlden. De logiska värdena i R är: TRUE, FALSE och NA.
5.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) | ! |
5.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% |
5.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().
<- matrix(data=c(1,2,3,4), nrow=2)
min_matris min_matris
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
5.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()
<- data.frame(num = 1:3, text = rep("Text", 3), logi=c(TRUE, TRUE, FALSE))
df df
## 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
5.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
$cyl mtcars
## [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.
$ny_variabel <- mtcars$mpg / mtcars$cyl mtcars
Eller döpa om variabler
$mpg_med_konstigt_namn <- mtcars$mpg mtcars
5.1.5.2 colnames()
Om du vill ha dina kolumnnamn som en vektor kan du extrahera dessa med colnames()
.
colnames(mtcars)
## [1] "mpg" "cyl" "disp"
## [4] "hp" "drat" "wt"
## [7] "qsec" "vs" "am"
## [10] "gear" "carb" "ny_variabel"
## [13] "mpg_med_konstigt_namn"
Ibland kanske du har en lista på variabelnamn som du vill att data ska ha.
<- c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K") kolumnnamn
Då kan du applicera colnames()
med din vektor på din data.frame.
colnames(mtcars) <- kolumnnamn
mtcars
## A B C D E F G H I J K NA NA
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 3.500000 21.0
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 3.500000 21.0
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 5.700000 22.8
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 3.566667 21.4
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 2.337500 18.7
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 3.016667 18.1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 1.787500 14.3
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2 6.100000 24.4
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2 5.700000 22.8
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 3.200000 19.2
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 2.966667 17.8
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3 2.050000 16.4
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3 2.162500 17.3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3 1.900000 15.2
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4 1.300000 10.4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4 1.300000 10.4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4 1.837500 14.7
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1 8.100000 32.4
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2 7.600000 30.4
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1 8.475000 33.9
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1 5.375000 21.5
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2 1.937500 15.5
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2 1.900000 15.2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4 1.662500 13.3
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2 2.400000 19.2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1 6.825000 27.3
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2 6.500000 26.0
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2 7.600000 30.4
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4 1.975000 15.8
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 3.283333 19.7
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8 1.875000 15.0
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2 5.350000 21.4
5.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
<- c("hej", "Kalle", "hejdå")
a <- c(TRUE, FALSE, FALSE, TRUE)
b <- 1:8
c
<- list(a,b,c)
x 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
<- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14)
ctl <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69)
trt <- gl(2, 10, 20, labels = c("Ctl","Trt"))
group <- c(ctl, trt)
weight
# Linjär regression.
<- lm(weight ~ group)
lm
is.list(lm)
## [1] TRUE
# Vilka element eller objekt som finns i listan lm?
attributes(lm)
## $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.
5.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.
<- as.Date(c("2018-08-14", "1970-01-01"))
minaDatum
1] - minaDatum[2] minaDatum[
## Time difference of 17757 days
as.Date(17757, origin = "1970-01-01")
## [1] "2018-08-14"
Sys.Date() ger dagens datum. date() returnerar dagens veckodag, datum och tid.
5.1.7.1 Olika datumformat
Symbol i R | Betydelse | Exempel |
---|---|---|
%d | dag | dagnummer | 01-31 |
%a | förkortad veckodag | Mon |
%A | ful | full veckodag | Monday |
%m | mån | månad nummer | 00-12 |
%b | förkortad månad | Jan |
%B | ful | full månad | January |
%y | 2 siffrig år | 18 |
%Y | 4 s | 4 siffrig år | 2018 |
5.1.7.2 Formatera datum
<- Sys.Date()
idag
<- format(idag, format = "%B %d %Y")
format_idag format_idag
## [1] "November 16 2020"
format(minaDatum[2], format="%m/%d/%y")
## [1] "01/01/70"
5.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
#Vektor
<- c(7, 15, 20, 20, 23, 1.2)
testScore 3] #tredje element testScore[
## [1] 20
-1] #alla utom den första testScore[
## [1] 15.0 20.0 20.0 23.0 1.2
Kör koden nedan för att se resultatet.
#Data.frame.
data(iris)
1] # Väljer kolumn nummer 1
iris[, 1:5, c(1,2)] # Rad 1 till 5 på Kolumn 1 och 2 iris[
5.2.1 Genom att begränsa värden som man vill plocka ut
# Vektor
< 10] # alla som är mindre än 10 testScore[testScore
## [1] 7.0 1.2
== 20] # alla som är lika med 20 testScore[testScore
## [1] 20 20
Kör koden nedan för att se resultatet.
# Data.frame
head(iris[iris[,1] > 7,]) # alla observationer där kolumn nummer 1 är större än 7. Funktionen head() används för att minimera rader som skrivs ut.
5.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"] testScore[
## Per
## 20
"Filip"] testScore[
## 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" "Species"