74 ptuiiltrry
Do operacji na ramkach danych zawierających zmienne czynnikowe przydają się jŻ* Si też funkcjo unatack(utils) i stack(utils). Jeżeli mamy zebrane pomiary pewner^** cechy w różnych podpopulacjach, to możemy wyniki tych pomiarów przedstawić albo
w tabeli, w której w pierwszej kolumnie jest informacja o podpopulacji, a w drufpej Ssę informacja o pomiarze albo w tabeli, w której w kolejnych kolumnach są zebranie w
informacje o wynikach dla podpopulacji. Funkcje unstackO i stack() poz na konwertowanie danych z jednej postaci na drugą.
Poniżej przedstawiamy przykłady wywołania powyżej wymienionych funkcji.
> # konstruujemy przykładową ramką danych
> czynniki * factor(rep(c("a", "b", "c"), times=5))
> dane " data.framę(runif(15), czynniki)
> dimCdane)
> # wyświetlamy pierwsze wiersze tej ramki danych, wszystkich jest 15
> head(dane)
runif.15. czynniki
> # zamieniamy ramkę na postać macierzową w hardziej zawartym formacie,
wartości odpowiadające tym samym czynnikom są w tej samej kolumnie
> unstack(dane)
1 0.72091831 0.03992616 0.2780364
2 0.08969056 0.24805597 0.1581621
3 0.44452236 0.41022322 0.6236955
4 0.02504580 0.99141448 0.3911667
5 0.13058592 0.60403541 0.5152448
> tt wybieramy podzbiór danych dla czynnika a
> subsetCdane, czynniki””"a")
runif.15. |
czynniki | |
1 |
0.72091831 |
a |
4 |
0.08969056 |
a |
7 |
0.44452236 |
a |
10 |
0.02504580 |
a |
13 |
0.13058592 |
a |
> # funkcja splitO podzieli tę ramkę na trzy ramki
> length(split(dane, czynniki))
[1] 3
Macierze są wygodnymi strukturami do przechowywania danych tabelarycznych, o ile elementy są tego samego typu. Dostęp do elementów macierzy odbywa się podobnie jak dla wektorów, poprzez wskazanie indeksów wybranych elementów korzystając z operatora [indeksyWierszy,indeksyKolumn] .
; Indeksy można podać dla każdego wymiaru oddzielnie, jeżeli indeksy nie będą podane to zostanie wybrana cala kolumna/wiersz. Format podawanych indeksów jest taki jak dla wektorów, czyli może to być wektor liczb całkowitych tego samego . znaku lub wektor wartości logicznych. Prześledźmy poniższy przykład.
konstruujemy przykładową macierz o wymiarach 3x3 i wyświetlamy ją > (macierz • matrix(l:9,3,3))
C,13 c,2] [,3]
1 |
4 |
7 | |
. £2,3 |
:. 2 |
B |
8 |
C3,) |
3 |
6 |
9 |
.> S wektor na diagonali tej macierzy
> diag(macierz)
U] i 5 9
V> P wartość elementów
> (macierz[1:2,1:2] ■>
z dwóch pierwszych kolumn i 1)
wierszy zamieniamy na 1
U.) 1 1 |
7 |
t2.3 1 1 |
8 |
13,3 3 6 |
9 |
> k wartości elementów | |
> (macierz[1:2,] |
- 2) |
C, 13 C.2] [,3] | |
Cl,] 2 2 |
2 |
, [2,3 2 2 |
2 |
C3,l 3 6 |
9 |
dwóch pierwszych wierszach zamieniamy na 2
> # wszystkie elementy macierzy zamieniamy na 3,
zmienia
> (macierz [] - 3)
ale wymiar się nie
C, 13 |
C.2] |
C ,3] | |
Ci,] |
3 |
3 |
3 |
[2,1 |
3 |
3 |
3 |
C3,l |
3. |
3 |
3 |
.> # ta instrukcja przypisuje do zmiennej macierz liczbę 4, ta zmienna już nie przechowuje macierzy
> (macierz = 4)
> U wyznaczmy macierz odwrotną
> macierzOdwrotna = solve(macierz)
W ostatnim wierszu tego przykładu została wykorzystana funkcja solve(base) wyznaczająca macierz odwrotną do danej macierzy kwadratowej. Funkcję solve() można wykorzystać również do rozwiązywania układu równań liniowych (stąd nazwa tej funkcji) postaci
A * x = D,
gdzie A to macierz współczynników, B to kolumnowy wektor, a x to wektor szukanych wartości. Aby wyznaczyć wektor ,v należy wywołać funkcję solve(A, B).
W powyższym przykładzie użyliśmy funkcji diag(base) do wyznaczenia diagonali macierzy. Jeżeli argumentem tej funkcji jest macierz, to wynikiem będzie wektor elementów na przekątnej, ale jeżeli argumentem jest wektor, to wynikiem funkcji