Rodzaje obiektów w R, cz. II

Nazywanie elementów wektora

Poszczególnym elementom wektora możemy nadawać nazwy, jesli chcemy, aby był on dla nas bardziej czytelny:

poraroku <- c(zima=15, wiosna=26, lato=26, jesień=33)
poraroku
##   zima wiosna   lato jesień 
##     15     26     26     33 

Nazwy elementów mogą składać się z więcej niż 1 słowa. Na przykład, respondentów biorących udział w Polskim Generalnym Sondażu Społecznym w 2008 r. zapytano o to, w jakim stopniu zgadzają się ze stwierdzeniem: ,,Jest znacznie lepiej dla rodziny, gdy mężczyzna zarabia pieniądze, a kobieta troszczy się o dom i dzieci''. Rozkład odpowiedzi na to pytanie pokazano w tabeli poniżej:

Odpowiedź Liczebność
Zdecydowanie się zgadzam 351
Zgadzam się 464
Nie zgadzam się 339
Zdecydowanie się nie zgadzam 70
Trudno powiedzieć 63

Aby zapisać ten rozkład w postaci wektora liczbowego, należy wykonać następujące polecenie:

pgss <- c(`Zdecydowanie się zgadzam` = 351, `Zgadzam się` = 464, `Nie zgadzam się` = 339, 
    `Zdecydowanie się nie zgadzam` = 70, `Trudno powiedzieć` = 63)
pgss
##     Zdecydowanie się zgadzam                  Zgadzam się 
##                          351                          464 
##              Nie zgadzam się Zdecydowanie się nie zgadzam 
##                          339                           70 
##            Trudno powiedzieć 
##                           63 

Nazwy elementom można także nadać z wykorzystaniem funkcji names(). Dla przykładu,

pgss <- c(351, 464, 339, 70, 63)
names(pgss) <- c("Zdecydowanie się zgadzam", "Zgadzam się", "Zdecydowanie się nie zgadzam", 
    "Nie zgadzam się", "Trudno powiedzieć")
pgss
##     Zdecydowanie się zgadzam                  Zgadzam się 
##                          351                          464 
## Zdecydowanie się nie zgadzam              Nie zgadzam się 
##                          339                           70 
##            Trudno powiedzieć 
##                           63 

Wektor zawierający nazwy elementów wektora pgss jest przykładem wektora znakowego. Wektorami zankowymi będziemy jednak zajmować się stosunkowo rzadko, dlatego nie poświęcamy im zbyt wiele uwagi w tym wprowadzeniu.

Działania na wektorach pozostawiają nazwy bez zmian:

pgss.prop <- pgss/sum(pgss)  # zamiana liczebności na proporcje
pgss.prop
##     Zdecydowanie się zgadzam                  Zgadzam się 
##                      0.27273                      0.36053 
## Zdecydowanie się nie zgadzam              Nie zgadzam się 
##                      0.26340                      0.05439 
##            Trudno powiedzieć 
##                      0.04895 
round(pgss.prop, 2)  # zaokrąglenie do 2. miejsca po przecinku
##     Zdecydowanie się zgadzam                  Zgadzam się 
##                         0.27                         0.36 
## Zdecydowanie się nie zgadzam              Nie zgadzam się 
##                         0.26                         0.05 
##            Trudno powiedzieć 
##                         0.05 
100 * round(pgss.prop, 2)  # zamiana proporcji na odsetki
##     Zdecydowanie się zgadzam                  Zgadzam się 
##                           27                           36 
## Zdecydowanie się nie zgadzam              Nie zgadzam się 
##                           26                            5 
##            Trudno powiedzieć 
##                            5 

Wybieranie elementów wektora

Jeśli interesuje nas nie tyle cały wektor, ile niektóre jego elementy, możemy wskazać te elementy za pomocą indeksu zamieszczonego w nawiasie kwadratowym następującym zaraz po nazwie wektora. Na przykład, jeśli chcemy wybrać tylko pierwszy element wektora pgss piszemy:

pgss[1]
## Zdecydowanie się zgadzam 
##                      351 

Jeśli chcemy wybrać element drugi i czwarty, piszemy:

pgss[c(2, 4)]
##     Zgadzam się Nie zgadzam się 
##             464              70 

Jeśli chcemy wybrać elementy od drugiego do czwartego, piszemy:

pgss[2:4]
##                  Zgadzam się Zdecydowanie się nie zgadzam 
##                          464                          339 
##              Nie zgadzam się 
##                           70 

Jeśli chcemy wybrać wszystkie elementy z wyjątkiem piątego, piszemy:

pgss[-5]
##     Zdecydowanie się zgadzam                  Zgadzam się 
##                          351                          464 
## Zdecydowanie się nie zgadzam              Nie zgadzam się 
##                          339                           70 

Jeśli chcemy wybrać wszystkie elementy z wyjątkiem drugiego i czwartego, piszemy:

pgss[-c(2, 4)]
##     Zdecydowanie się zgadzam Zdecydowanie się nie zgadzam 
##                          351                          339 
##            Trudno powiedzieć 
##                           63 

Jeśli poszczególnym elementom wektora nadano nazwy, wówczas do wyboru elementów można wykorzystać ich nazwy:

pgss["Trudno powiedzieć"]
## Trudno powiedzieć 
##                63 

Przypuśćmy, że chcemy wyznaczyć skumulowany rozkład częstości odpowiedzi na cytowane wyżej pytanie z PGSS; wykorzystamy do tego funkcję cumsum(). Ponieważ jednak rozkład skumulowany ma sens tylko w przypadku zmiennych porządkowych, musimy najpierw wykluczyć ze zbioru wartości kategorię ,,Trudno powiedzieć'':

pgss1 <- pgss[-5]/sum(pgss[-5])
cumsum(pgss1)
##     Zdecydowanie się zgadzam                  Zgadzam się 
##                       0.2868                       0.6658 
## Zdecydowanie się nie zgadzam              Nie zgadzam się 
##                       0.9428                       1.0000 

Wektory logiczne

Wektory logiczne składają się z wartości logicznych TRUE i FALSE. Wykorzystujemy je dość często — na przykład wtedy, gdy chcemy ze zbioru wartości wybrać tylko te, które spełniają określony warunek logiczny. Na przykład, przypuśćmy, że dany jest wektor w składający się następujących liczb:

w <- c(-9, 1, 2, 3, 4, 8)

Przypuśćmy, że chcemy sprawdzić, które wartości tego wektora są większe od 0. Wpisujemy wówczas:

w > 0
## [1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE

Jeśli poszczególny element wektora w jest większy od 0, program zwraca TRUE, w postałych przypadkach — zwraca FALSE.

Jeśli chcemy z wektora w wybrać tylko wartości dodatnie, piszemy:

w[w > 0]
## [1] 1 2 3 4 8

Ponieważ warunek logiczny zamieszczony jest w nawiasie kwadratowym, oznacza on zbiór wartości wektora w, które mają zostać wybrane przez program. Wszystkie wartości, dla których warunek jest spełniony, zostaną wybrane.

Relacje logiczne w R:

a > b  # a jest większe od b; >= oznacza większy lub równy
a < b  # a jest mniejsze od b; <= oznacza mniejszy lub równy
a == b  # a jest równe b; uwaga na podwójny znak równości
a != b  # a jest różne od b
(a > b) & (b > c)  # spójnik logiczny: a jest większe od b i b jest większe od c
(a > b) | (b > a)  # ,,lub'': a jest większe od b LUB b jest większe od a.