Jeżeli jako pierwszą podamy większą liczbę, to R utworzy ciąg malejący.
5:1
[1] 5 4 3 2 1
Jeżeli interesują nas bardziej wyrafinowane sekwencje liczb, to powinniśmy zainteresować się funkcja seq. Poniżej tworzymy sekwencję zaczynającą się od 5, w której każda kolejna liczba jest większa o 3. Nie przekraczamy podanej granicy 55, więc ostatnią liczbą będzie 53. Więcej o tej funkcji można znaleźć w dokumentacji (?seq)
Utwórzmy też macierz o wymiarach 4x5. Kolejne liczby z wektora dwadziescia_liczb wypełniają po kolei kolumny naszej macierzy. Zrobimy to za pomocą funkcji matrix.
matrix(dane, wiesze, kolumny)
dane - wartości, którymi chcemy wypełnić macierz
wiesze - liczba wierszy
kolumny - liczba kolumn
Warto w tym miejscu zwrócić uwagę na dwa fakty.
R domyślnie wypełnia macierze kolumnami
Jeżeli jakaś funkcja przyjmuje jako argumenty wymiary jakiejś dwuwymiarowej struktury danych, to najpierw podaje się liczbę wierszy a dopiero potem liczbę kolumn. Oto mnemotechniczna rymowanka, która pozwala zapamiętać to zachowanie: wiersze pierwsze.
O wymiarach macierzy możemy się dowiedzieć za pomocą funkcji dim, ncol, nrow
dim(macierz_2) # wymiary
[1] 11 3
ncol(macierz_2) # liczba kolumn
[1] 3
nrow(macierz_2) # liczba wierszy
[1] 11
Dla naszych celów ta wiedza powinna wystarczyć, statystycy z socjologii prosili jednak o podstawy algebry w R. Polecam więc zajrzenie w stosownym czasie do np. Algebra w R (polecam również samą stronę!)
Listy
Listy w przeciwieństwie do wektorów przechowują sekwencje wartości różnych typów. Możemy w niej przechowywać wektory różnych typów o różnej długości a nawet inne listy. W tym sensie są podobne do list z niektórych innych języków programowania. Listy tworzymy za pomocą funkcji list.
lista <-list(c(1,2,3,4,5), # pierwszy element: wektor typu `numeric`c('Adam', 'Marysia', 'Zosia', 'Tosia'), # drugi element: wektor typu `character`TRUE, # trzeci element: wektor typu `logical`TRUE, # czwarty element: wektor typu `logical`list( # piąty element: listac(-1,-2,-3) # pierwszy element: wektor typu `numeric` ) )lista
Elementom listy możemy nadawać nazwy. Dlatego w niektórych sytuacjach możemy traktować je jak słowniki z innych języków programowania, przechowujące pary klucz-wartość.
Nazwane listy również tworzymy przy pomocy funkcji list.
Do list wrócimy jeszcze kiedy będziemy mówić o indeksowaniu.
Ramki danych (data frame)
Ramki danych (data frame) są typem danych, z którym w praktyce będziemy pracować najczęściej. O ramkach danych można myśleć jako np. o tabelach Excela, w której każdy wiersz reprezentuje jedną obserwację.
Tworzenie ramek danych jest dość podobne do tworzenia list. To, co w listach było nazwami elementow, w przypadku ramek danych będzie nazwami kolumn. Poniżej znajduje sie kilka przydatnych sposobów tworzenia ramek danych. Na razie pomijamy najczęściej wykorzystywany w praktyce sposób. Z reguły bowiem ramki danych będziemy tworzyć wczytując dane z pliku. Tym jednak zajmiemy się później.
Podstawowy sposób stworzenia ramki danych wygląda tak:
x <-c('Kasia', 'Zosia', 'Marysia', 'Tosia', 'Zbyszek')y <-factor(c('F', 'F', 'F', 'F', 'M'), levels =c('F','M'))z <-c(2, 4, 5, 8, 2)# ramki danych tworzy się w zasadzie tak samo jak listydane <-data.frame(imie = x,plec = y,liczba_jabluszek = z ) dane
imie plec liczba_jabluszek
1 Kasia F 2
2 Zosia F 4
3 Marysia F 5
4 Tosia F 8
5 Zbyszek M 2
Jeśli mamy listę, której elementy są wektorami równej długości, to możemy przekonwertować ją na ramkę danych.
imie plec liczba_jabluszek
1 Kasia F 2
2 Zosia F 4
3 Marysia F 5
4 Tosia F 8
5 Zbyszek M 2
W ramce danych nie tylko kolumny mogą mieć swoją nazwę. Możemy ustalić, że również każdy wiersz będzie miał nazwę. Uczynimy to przekazując funkcji data.frame argument row.names w postaci wektora z nazwami.
Powiedzieliśmy sobie, że w ramkach danych kolumny oraz wiersze mogą mieć nazwy. Jeśli chodzi o kolumny, to funkcji colnames zwraca wektor z nazwami kolumn ramki danych.
dane
imie plec liczba_jabluszek
1 Kasia F 2
2 Zosia F 4
3 Marysia F 5
4 Tosia F 8
5 Zbyszek M 2
colnames(dane)
[1] "imie" "plec" "liczba_jabluszek"
Za pomocą tej samej funkcji możemy zmienić też nazwy. Wystarczy, że nadpiszemy zwrócony przez funkcję colnames wektor swoim własnym wektorem, w którym zawrzemy nowe nazwy kolumn. To samo możemy zrobić również z nazwami wierszy, korzystając w funkcji rownames.