78 pnzuRrry
78 pnzuRrry
edukacj a praca
1 uczeń pracuje
2 absolwent pracuje
3 uczeń nie pracuje
4 absolwent nie pracuje
5 uczeń
expand.grid(edukacja= c("uczen", "absolwent"), praca = cCpracuje", "nie pracuje"), piec “ cCKobieta", "Mezczyzna")) piec Kobieta Kobieta Kobieta Kobieta
pracuje Mężczyzna
6 absolwent pracuje Mezczyzna
7 uczeń nie pracuje Mezczyzna
8 absolwent nie pracuje Mezczyzna
Aby uporządkować wiersze macierzy według określonego klucza (wybranej ko--k liunny) możemy użyć już poznanej funkcji order (base). Wynikiem tej funkcji jest ’; permutacja, która powoduje że elementy wektora będą uporządkowane. Tę permu-?' tacje można wykorzystać do przeindeksowania wierszy macierzy.
> » zainicjujmy przykładową macierz 16 liczb
[.13 |
[,2] |
[,3] |
C,4] | |
ClJ |
14 |
6 |
16 |
8 |
[2,] |
12 |
11 |
3 |
7 |
[3,] |
10 |
2 |
5 |
15 |
[4.] |
4 |
1 |
13 |
9 |
> (macierz.^- matrix(sample(16:1,16 ,F) ,4,4, byrow-T))
> Z sortujemy macierz wzglądem pierwszej kolumny, funkcją order O
odczytujemy pożądaną kolejność i przeindeksowujemy macierz
> macierz[order(macierz[,13), 3
UJ |
(.13 4 |
[.23 1 |
[,33 13 |
[.43 9 |
[2,3 |
10 |
2 |
’ 5 |
15 |
[3,3 |
12 |
11 |
3 |
7 |
[4,3 |
14 |
6 |
16 |
8 |
Bardzo przydatną funkcją do operacji na macierzach jest apply(base). Pozwala' ona na wykonanie pewnej funkcji na kolumnach lub wierszach zadanej macie Dzięki temu można policzyć sumy, średnie, maksima lub inne funkcje z kolumn, czy! też wierszy macierzy. Wyjaśnimy to na przykładach.
UJ |
[.13 1 |
[.23 5 |
[,33 9 |
[.43 13 |
[2,3 |
2 |
6 |
10 |
14 |
[3,3 |
3 |
7 |
11 |
15 |
[4,3 |
4 |
8 |
12 |
16 |
> # na tej macierzy będziemy eksperymentować
> (macierz = matrlx(l:16,4,4))
> # wyznaczmy sumę (trzeci argument określa co) elementów w wierszach
(drugi argument określa czy w wierszach czy w kolumnach)
> apply(macierz,1,sum)
[1] 28 32 36 40
\ ! /
4 teraz sumę elementów w kolumnach ' apply(macierz,2,3urn)
'] 10 26 42 58
# elementy maksymalne w wierszach S^apply (macierz,1,max)
■jt] 13 14 15 16
# a teraz sumę kwadratów elementów w wierszach fcląpply(macierz,l,functlon(x) sum(x~2))
■1] 276 336 404 480
Wyznaczanie średnich i sura z kolumn lub wierszy macierzy w funk-cją apply O należy traktować jedynie jako przykład. Znacznie szyb-ciej można to zrobić funkcjami colSumsO, rowSumsO, colMeansO # irowMeansO.
Pomijając ten przypadek, funkcja apply () jest bardzo przydatna do wyznaczania różnych charakterystyk macierzy lub ramek danych.
Macierze można konstruować nie tylko funkcją matrix() ale również funkcjami cbind(base) i rbind(base). Funkcja cbind(base) pozwala na zbudowanie macierzy poprzez połączenie ze sobą kilku wektorów (wektory będą kolumnami w powstałej macierzy), macierzy lub przez dodanie kolumny do już istniejącej macierzy. Wynikiem tej funkcji jest macierz powstała z połączenia kolumn wszystkich argu-1 mentów (macierzy lub wektorów). Podobnie funkcja rbind(base) tworzy macierz powstałą z połączenia wierszy wszystkich argumentów. W obu przypadkach, w razie potrzeby, argumenty są konwertowane do wspólnego typu. Obie funkcje można trak-i tdwać jak macierzowe odpowiedniki funkcji c (), która służyła do łączenia wektorów.
łączenie dwóch wektorów, przy okazji zadziała , .recycling rule’’
:> !rbind(l:4, "a")
m.:S c.D c.2] f,3] c,4]
HKl: “1" ”2" "3" ''4"
"a" "a" "a1' "a"
Łączyć macierze ze sobą można również funkcją merge(base). Działa ona podobnie do SQLowego polecenia JOIN znanego z baz danych. Dla dwóch macierzy lub ramek danych będących argumentami tej funkcji możemy wskazać kolumny (jedną lub więcej) z kluczami (wskazujące na identyczne obiekty). Funkcja mergeO tworzy z dwóch macierzy jedną, łącząc wiersze o takiej samej wartości klucza we wskazanych kolumnach.
* konstruujemy dwie ramki danych ze wspólną kolumną 'klasa’
> (tabl = data. f rama (uczeń » cOAla", "Ola", “Ela", "Ula"), klasa
"IB", |
"IB |
uczeń klasa | |
1 Ala |
IA |
■2 Ola |
IB |
3 Ela |
IB |
K? Ula |
IB |
=c("IA"