Programering i R

Föreläsning 2: Datastrukturer, databearbetning och I/O

Josef Wilzén

STIMA, Linköpings universitet

Uppdaterad 2017-01-31 08:22:16

Föreläsning 2: Innehåll

  • Interaktiv del ~ 30 min
  • Datastrukturer
    • Matriser
    • Data.frame
    • Listor
  • Grundläggande databearbetning
  • Input och output (I/O) i R

Interaktiv del

Några generella frågor på kursen:

Tillåtna hjälpmedel på tentan: Hjälpmedel:

  • Den inbyggda hjälpen i R (ej internet)
  • Referenskort:
    • R reference card v.2 av Matt Baggot, [här]
    • ggplot2: [här]
    • RStudio: [här]
    • Ev. något mer referenskort

Några generella frågor på kursen:

Finns det exakt en lösning till uppgifterna?

  • övningsuppgifter: enkla uppgifter kan ha en lösning, men många har olika lösnignar
  • inlämningsuppgifter:
    • Alla testen i markmyassignment måste bli godkända. De exempel på funktionsanrop som finns är till för att ni lättare ska klara testerna.
    • Ni har rätt mycket frihet vilken kod ni skriver inuti funktioner:
function(){
  "olika lösningar"
}

Markmyassignmnet:

Om alla tester är avklarade på labb1:

mark_my_assignment()
Labbinformation: ……
approx_e(): ………
logical_equality(): ……….
lukes_father(): …….
mult_first_last(): ………
orth_scalar_prod(): ………
three_elements(): ……..

DONE ================================================== Good work!
(eller “You're a coding rockstar!”, “Yay! All done!”, etc)

Markmyassignmnet:

demo…

Hantera strängar och return()

  • return()
  • paste()
  • print()
  • cat()

Kolla hjälpen, testa sen.

Läs här och här

Blandade frågor

Demo…

Datastrukturer

Datastrukturer

  • Hur datorn lagrar data / information
  • Vi kommer använda:
    • Vektorer
    • Matriser
    • data.frame
    • Listor

Vektorer

Vektorer

  • Element av samma typ
  • En dimension
  • Indexering med [ ]

Exempel

vektor <- seq(1, 3, 0.5)
vektor
[1] 1.0 1.5 2.0 2.5 3.0
vektor[2:3] <- c(4,7)
vektor
[1] 1.0 4.0 7.0 2.5 3.0

Sortera vektorer

  • sort() och order()
vektor <- c(5,2,4,3,-1)
sort(vektor)
[1] -1  2  3  4  5
order(vektor, decreasing = FALSE)
[1] 5 2 4 3 1

Faktorvariabel (vektor)

  • Dummyvariabler vid analyser
  • Sparar minnesutrymme (jmf. med textvektorer)
  • Text till faktor med factor()
  • Textdata som läses in i R konverteras till factor om inte stringsAsFactors = FALSE
minText <- c("A", "B", "A", "A")
minFaktor <- factor(minText)
minFaktor
[1] A B A A
Levels: A B

Matriser

Matriser

  • Tvådimensionell
  • Element av samma typ
  • Skapas med matrix()
  • Vanliga operatorer sker elementvis
  • Matrisoperatorer finns, mer om det senare i kursen
  • Indexering med [ , ]

Matrisexempel

minMatris <- matrix(data=c(1,3,2,4), nrow=2)
minMatris
     [,1] [,2]
[1,]    1    2
[2,]    3    4
minMatris[, 2] <- c(0, 1)
minMatris
     [,1] [,2]
[1,]    1    0
[2,]    3    1

Data.frame

Data.frame

  • “dataset” i R
  • Ett objekt som andra
  • Olika kolumner kan ha olika datatyper
  • Indexering av variabler kan göras med variabelnamn ["min_var"]
  • Specialfall av listor
  • Indexering av rader och kolumner med [ , ]

Skapa en data.frames

minData <- 
 data.frame(vikt=c(58,78,98), 
            namn=c("Lisa","Kim","Max"), 
            rik=c(TRUE,FALSE,FALSE))
minData
  vikt namn   rik
1   58 Lisa  TRUE
2   78  Kim FALSE
3   98  Max FALSE

Läsa in interna data.frames

  • Inkluderade datamaterial i R
  • Finns i paketet datasets
data(iris)

Iris

Iris setosa

Undersöka en data.frame

head(iris)
tail(iris)
summary(iris)
dim(iris)
  • Använda R-Studios “Environment”

Variabler

  • Är vektorer
  • Olika sätt att “välja” en variabel
iris$Species
iris[, "Species"]
iris[["Species"]]
iris[, 5]
iris[, colnames(iris) == "Species"]

Skapa en ny variabel

  • Lägger till en ny vektor
  • Som vektorer i övrigt
iris$Sepal.Length2 <- 
  iris$Sepal.Length ^ 2 
iris$Species2 <- c(2,1)
iris$Species2[1:10]
 [1] 2 1 2 1 2 1 2 1 2 1

Ta bort variabler

  • Tillskriver variabeln värdet NULL
  • Negativ indexering
iris$Sepal.Length2 <- NULL
iris <- iris[, -7]

Byta variabelnamn

  • Variabelnamn är en textvektor
  • Bör inte innehålla mellanrum
colnames(iris)
[1] "Sepal.Length"  "Sepal.Width"   "Petal.Length"  "Petal.Width"  
[5] "Species"       "Sepal.Length2" "Species2"     
colnames(iris)[1] <- "Oj_EnVariabel"
colnames(iris)[1:2]
[1] "Oj_EnVariabel" "Sepal.Width"  

Row ID

  • Rader har enskilda ID
  • Detta är också en textvektor!
rownames(iris)[1:5]
[1] "1" "2" "3" "4" "5"
rownames(iris)[1] <- "Blomma 1"
rownames(iris)[1:5]
[1] "Blomma 1" "2"        "3"        "4"        "5"       

Listor

Listor

  • Som en vektor, men alla element är objekt
  • Tänk: “lådor” med objekt
  • Kan namnges precis som variabler i data.frames
minLista <- list(Pelles="Pelle Karlsson", c(1,2,3,4))
minLista
$Pelles
[1] "Pelle Karlsson"

[[2]]
[1] 1 2 3 4

Indexera listor

  • Görs med enkla och dubbla “hakparanteser”
    • []: Tänk plocka ut en eller flera “lådor”
    • [[]]: Tänk öppna och ta innehållet i en låda
  • Om namngivna:
    • lista$list_element_namn
    • [["list_element_namn"]]

Indexera listor

minLista <- list(Perta="Perta Karlsson", c(1,2,3,4))
minLista[1]
$Perta
[1] "Perta Karlsson"
minLista[[1]]
[1] "Perta Karlsson"

Att studera objekt i R

Att studera datatyper i R

Funktion Exempel Kort beskrivning
summary() summary(a) Sammanfattar innehållet i ett R-objekt
str() str(a) Visar kondenserat (en rad per objekt) alla delar i ett R-objekt
is. is.logical(a) Testar om objektet är en given klass.

Grundläggande databearbetning

Sammanfoga data

  • “Ni statistiker tror att världen kommer i excelformat”
  • Grundläggande databearbetningar
    • rbind()
    • cbind()
    • merge()
  • Aggregera data används aggregate()

Demo: Matriser, data.frame, listor och databearbetning

Input och output (I/O) i R

Input och output (I/O) i R

  • Olika sätt att läsa in data (input):
    • Från filer på datorn / nätverket (.csv, .xlsx, .txt, .Rdata)
    • Från filer på webben (httr)
    • Från databaser (med SQL)
    • Via API:er (ex. rOpenGov)

Input och output (I/O) i R

  • Olika sätt att leverera (output):
    • Filer
    • Databaser / API:er
    • Interaktiva webbdatabaser (ex. Shiny)
    • Rapporter / analyser / texter (knitr)

Filhantering i R

  • R läser in i internminnet, men ofta vill vi arbeta med filer från hårddisken
  • R arbetar i working directory
    • För att ta reda på sökvägen getwd()
    • För att ändra sökvägen setwd()
    • För att lista filer i katalogen dir()
  • För att snabbt och enkelt få sökvägen till en fil file.choose()
  • Detaljer om hur man kan manipulera kataloger och filer med R finns [här]

Input (I)

För att läsa in data finns:

  • .csv och .txt-filer: read.table(),read.csv(), read.csv2()
  • .Rdata-filer: load()

Output (O)

För att spara data från R till hårddisken finns (bland annat):

  • .csv - filer: write.table(),write.csv(), write.csv2()
  • .Rdata - filer: save()

Andra datakällor

För andra datakällor finns andra paket:

R-Paket Filtyp
XLConnect, gdata Excel-filer
foreign Filer från Epi Info, Minitab, S, SAS, SPSS, Stata, Systat and Weka
RODBC, RMySQL m.m. Kontakta databaser från R
XML XML - data
RJSONIO JSON - data

Länkar om att läsa in olika typer av data: här och här

Demo: Filhantering, Input och Output (I/O)