34 Łagodne wprowadzenie do R
1.5.6.4 Indeksy
Do elementów wektorów, list, macierzy i ramek danych możemy się odwoływać na cztery różne sposoby. Przedstawiamy te sposoby poniżej, wraz z krótkim opisem, więcej szczegółowych informacji znaleźć można wpisując w R polecenie ?Extract. Do elementów struktur danych możemy odwoływać się:
• W notacji wektorowej zmienna [zakres].
W tym przypadku zmienna jest listą, wektorem, macierzą lub ramką danych, ; zakres jest wektorem liczb całkowitych lub jedną liczbą całkowitą. Wynikiem £ jest lista(wektor) zawierająca wybrane elementy.
W przypadku indeksowania list, ramek danych lub wektorów z nazwanymi ; elementami, możemy w nawiasach [] podać wektor nazw elementów. W tym przypadku wybrane zostaną elementy o nazwach wskazanych przez wektor indeksów—nazw.
Jeżeli zakres jest wektorem liczb ujemnych, to zwrócone będą wszystkie elementy z listy(wektora) POZA wskazanymi pozycjami. Nie można w zakres mieszać indeksów dodatnich i ujemnych.
> wektor <- 1:10
> wektor
[1] 12345678
> wektor[1:3]
[1] 1 2 3
> wektor[c(-l,-3,-5)]
[1] 2 4 6 7 8 9 10
c(a“l, b“2, c=3)
> wektor <•
> # indeksy nie muszą być liczbami, mogą być nazwami elementów
> wektor[c(“a”,"c")] a c
1 3
• W notacji macierzowej zmienna [zakres l,zakres2].
Gdzie zmienna jest macierzą lub ramką danych. Wybierana jest podmacierz (ramka danych) o wskazanych indeksach. Jeżeli któryś z zakresów nie będzie podany zostaną wybrane wszystkie elementy w danym wierszu/kolumnie.
> macierz <- matrix(l:4,2,2)
> macierz
1.13 C.23
[2,] 2
# tylko pierwszy wiersz
r, ,........_ ,
> tt tylko elementy poza pierwszym wierszem i pierwszą kolumną
> macierz[-l,-l3 [1] 4
Domyślnie, jeżeli wynikiem ma być pojedynczy wiersz lub kolumna, to „gubiony” jest wymiar macierzy, wynik nie jest już macierzą ale wektorem. Jeżeli chcemy zagwarantować, że wynik będzie macierzą, to należy zmienić argument drop. Poniżej przykład.
# wynik jest wektorem
# wynik jest wektorem
# wynik jest macierzą
> macierz [1,3 [13 1 3
> macierz[1,,drop=T]
[13 1 3
> macierz[1,,drop»F3
C,13 [,23 [1,3 i 3
• W notacji listowej zmiennoSwartoscJ
Gdzie zmienna to lista, wektor lub ramka danych. Wynikiem zastosowania tego operatora jest element listy/wektora (lub kolumna z ramki danych) o nazwie wartości.
> osobnik <- list(name=c("Jan","Tomasz"), surname="Kowalski", age=25,
married“T)
> osobnik$name
[13 "Jan" "Tomasz"
> osobnik [[2]]
[13 "Kowalski"
• W notacji nawiasowej zmienna [ [indeks 1]].
Gdzie zmienna to wektor, lista, macierz lub ramka danych. Wybierany jest jeden element o indeksie indeks 1 (indeks musi być pojedynczą liczbą, nie może być wektorem). Najczęściej ten sposób indeksowania wykorzystywany jest do list. Pamiętajmy, że ramka danych też jest listą, dlatego użycie tego sposobu indeksowania na ramce danych spowoduje wybranie wskazanej kolumny ramki danych, podczas gdy użycie tego indeksowania na macierzy spowoduje wybranie jednej wartości z macierzy.
> macierz <- matrix(ł:4,2,2)
> # drugi element macierzy to jedna liczba
> macierz[[233 [13 2
> osobnik <* list(name='c("Jan"/'Tomasz"), 8urname="Kowalski“, age=25,
married=T)
> # pierwszy element listy, wektor dwuelementowy
> osobnik[[133
[13 "Jan" "Tomasz"
Przydatną funkcją przy operacjach na indeksach jest funkcja which(base). Jej wynikiem są indeksy elementów spełniające zadany warunek logiczny. Jeżeli interesują nas indeksy wystąpień pewnego wektora elementów w innym wektorze możemy