Inleiding Programmeren + R

Indexeren

» Start

Indexeren       


Subscripting of Indexeren is het selecteren van elementen van een vector, matrix, lijst of dataframe. We laten hier alleen basale voorbeelden van het gebruik van een indices zien in vectoren. 


We maken eerst de variabelen waar we mee gaan werken:

> x <- c(1,2,3,4,5,6,7,8,9,10)

> y <- 3*x - 12 

> y 

[1] -9 -6 -3 0 3 6 9 12 15 18

Om te indexeren gebruiken we rechte haken [ en ]

> y[3] # het derde getal uit y

[1] -3 

> y[3:5] # het derde tot en met vijfde getal uit y

[1] -3 0 3 

> y[c(1,3,5)] # het eerste, derde, en vijfde getal uit y

[1] -9 -3 3 

Negatieve selectie kan ook

> y[-3] # laat het derde element weg 

[1] -9 -6 0 3 6 9 12 15 18 

> y[-c(1,3,5)] # laat elementen 1,3 en 5 weg 

[1] -6 0 6 9 12 15 18 

We kunnen een index ook gebruiken om elementen van een vector te vervangen door andere:

> y[c(1,3,5)] <- 0 # vervang het eerste, derde, en vijfde getal door 0

[1] 0 -6 0 0 0 6 9 12 15 18

We kunnen ook selecteren met behulp van een Boolese vector. We selecteren alle elementen van y die groter zijn dan 0 door:

> y[y>0] 

[1] 3 6 9 12 15 18 

> x <- 1:10

> x[x>3] <- 'hallo'

> x

[1] "1"     "2"     "3"     "hallo" "hallo" "hallo" "hallo" "hallo" "hallo" "hallo"

Je kunt in het laatste voorbeeld zien dat je in een vector dus geen getallen mag mengen met tekst. De getallen worden dan nl automatisch in tekst omgezet.


Nog niet bestaande elementen van een vector kunnen we wel alvast aanwijzen met een index, om ze daarmee een waarde toe te kennen, zoals het volgende voorbeeld laat zien:

    

    > x <- 1:5

    > x

    [1] 1 2 3 4 5

    > x[7:9] <- 7:9 # ken een waarde toe aan het 7e, 8e, en 9e element van x

    > x

    [1] 1 2 3 4 5 NA 7 8 9 # het 6e element is daarna dus NA (Not Available)

    

Dat kan ons van pas komen als we in een lus een vector willen vullen met waarden, waarbij we beginnen met een lege vector:

    

    > x <- NULL

    > x

    NULL

    

    > for(i in 1:10) {x[i] <- i} # vul x met de getallen 1 t/m 10

    > x

    [1]  1  2  3  4  5  6  7  8  9 10

    

Samenvattend zijn er dus verschillende manieren om gegevens uit een vector te selecteren. Hier is een kort overzicht. Veronderstel dat x een vector met getallen is, bijvoorbeeld:

    

    > x <- 1:10 

    > length(x)   # hoeveel elementen zitten er in x?

    > x[2]        # het ide element, (i = 2)

    > x[-2]       # alle elementen, behalve het ide, (i = 2)

    > x[1:5]      # de eerste k elementen, (k = 5) 

    > x[(length(x)-5):length(x)] # laatste k elementen, (k = 5)

    > x[c(1,3,5)] # bepaalde elementen (eerste, 3e en 5e) 

    > x[x>3]      # alle waarden groter dan een bepaalde,(de waarde is 3)

    > x[x>3]<- 0  # ... en vervang die door het getal 0

    > x[]<- 2     # vervang alle elementen van x door het getal 2

    > x[ x< -2 | x > 2]  # groter dan of kleiner dan een bepaalde waarde

    > which(x == max(x)) # op welke plaats staat het grootste getal?

    

Labels


Aan de elementen in een vector kunnen labels worden gekoppeld. Dat gebeurt met behulp van de functie names.

> z <- c('orde', 'familie', 'geslacht', 'soort')

> x <- 4:1

> x

[1] 4 3 2 1

> z

[1] "orde"     "familie"  "geslacht" "soort"  

> names(x)

NULL

> names(x)<-z

> x

orde  familie geslacht    soort 

4        3        2        1 

De labels kunnen worden gebruikt om elementen uit de vector te selecteren:

> x[c('orde','geslacht')]

orde geslacht 

4        2 

De labels kunnen weer worden verwijderd door de waarde NULL er aan toe te kennen.

> names(x)<-NULL

> x

[1] 4 3 2 1