72 pnzuHiry
> * funkcją tapplyO liczymy średnią cechę A w grupach
> tapply(cucha(.,1), podpopulacje, mean)
M K
0.5689776 0.6001836
> # a tero* funkcją byO liczymy średnie
> by(cecha, podpopulacje, mean)
INDICES: M
cecha A cecha B 0.5689776 -0.4823782
INDICES: K V. ' ‘ , '
cecha A cecha B 0.6001835 0.1861065
> * i funkcją aggregateO otrzymujemy te same wyniki ui innej formie
> aggregate(cecha, list(podpopulacje, grupy), mean)
Group.1 Group.2 cecha A cecha B | ||
1 |
H |
B 0.5293555 -0.4201940G |
2 |
K |
B 0.8902523 0.44471728 |
3 |
M |
C 0.6085997 -0.54456233 |
4 |
K |
C 0.3101147 -0.07250421 |
U wynikienj^.tego polecenia jest• wektor
w aktualnej przestrzeni nazw unlist(eapply(environment(), FUN*object.size)) grupy podpopulacje cecha
424 424 432
z rozmiarami wszystkich obiektów'
Ramka danych (ang. data.Jrame) to struktura do przechowywania danych tabelą-. rycznych. Korzystać z tego obiektu można tak jak z listy wektorów, a więc z użyciem J operatora $ (wektory odpowiadają kolejnym zmiennym) lub jak z macierzy dwuwy-S" miarowej (korzystając z notacji [,]). W przeciwieństwie do macierzy różne kołtuniły,; mogą mieć elementy różnych typów.
Aby obejrzeć elementy ramki danych można skorzystać z funkcji edit(utils): -Otwiera ona okno, w którym można przeglądać ramkę danych, a także modyfikować.: jej poszczególne elementy. Po zakończeniu edycji, jeżeli jakiś element ramki został:}? zmieniony, to wynikiem funkcji edit O jest zmieniona ramka danych (podobnie działa funkcja fix(utils), z tą różnicą, że nie zwraca ona wyniku ale automatycznie ; zmienia wartość ramki danych będącej argumentem tej funkcji). Edytować element)! ramki danych możemy również funkcją data.entry(utils).
Innym sposobem wyświetlenia fragmentu ramki danych jest skorzystanie z futikcji.|? head(utils) i tail(utils). Wyświetlają one kilka (liczbę określoną przez ich druglćj argument, domyślnie 6) pierwszych lub ostatnich wierszy z ramki dauych/macierzy.
Wynikiem funkcji names(utils) i colnames (utils) jest wektor z nazwami ko-^I lumn (zmiennych) w ramce danych. Te funkcje pozwalają również na zmianę tych nazw. Podobnie funkcja rownames(utils) pozwala na wyświetlenie lub zmian®* nazwy wierszy (przypadków) w ramce danych. Oba wektory (z nazwami koluinrtg i wierszy) można otrzymać w wyniku wywołania funkcji dimnames(utils). Wekto-ć, ry nazw, nie mogą zawierać powtarzających się napisów.
Typy /iiiirnnydi i operacje na nich
jfii Tak jak dla macierzy, liczi >y wierszy I kolumn można wyznaczyć funkcją dim(base) (jej wynikiem jest dwueleinentowy wek Im /, wymiarami ramki danych) lub funkcjami ncol(base) i nrow(base) wyznaczającymi odpowiednio liczbę kolumn i wierszy, ę-; przy operacjach na ramce danych przydat ne mogą być też funkcje attach(base) j detach(base). Pierwsza powoduje, że kolejne kolumny są widoczne w przestrzeni nazw jako wektory o nazwach odpowiadających nazwom kolumn (a więc, aby odwołać się do kolumny, nie potrzebujemy podawać nazwy ramki danych). Druga funkcja Usuwa z przestrzeni nazw te wpisy. Przedstawmy to na przykładzie.
> # funkcją dataO wczytujemy wbudowaną w R ramką danych z danymi o
irysach data(iris)
jakie są na żury kolumn?
> names(iris)
.[ii "Sepal.Length" "Sepal.Uidth" “Petal.Length" "Petal.Width" "Species"
> tt wyświetlmy kilka pierwszych wartości ostatniej kolumny head(iris$Species)
V [1] setosa setosa setosa setosa setosa setosa Levels: setosa versicolor virginica
> # od teraz możemy posługiwać się nazwami kolumn ramki danych iris, bez
potrzeby poprzedzania ich przedrostkiem irisS 5> attach(iris)
> head(Species)
.[I] setosa setosa setosa setosa setosa setosa Levels: setosa verslcolor yirginica
Nie zawsze chcemy zaśmiecać całą przestrzeń roboczą nazwami wszystkich kolumn z tabeli, tylko po to, by skrócić zapis nazw zmiennych w jednej instrukcji. W wielu przypadkach wygodniej jest użyć funkcję with(base), której pierwszy argument wskazuje ramkę danych a drugi zbiór poleceń. W tych poleceniach można Odwoływać się do nazw kolumn ramki danych bezpośrednio, bez konieczności wskazywania ich operatorem $.
'Ijft: używamy funkcji withO, aby skrócić zapis, w tym przypadku możemy iis; korzystać z kolumn ramki danych iris, nie poprzedzając ich nazutą vith(iris, różnica «- Sepal.Length - Petal.Length) tt i jeszcze przykład z listą obiektów dane - list(od = 10, do = 20, kiedy = "rano")
.Vith(dane, różnica «- do - od)
Jeżeli chcemy wykonać obliczenia jedynie na wybranych wierszach z ramki danych, a nie na całej ramce, to do wyboru tych wierszy warto użyć funkcji subset (base) Pierwszym argumentem jest ramka danych do skrócenia a drugim wektor indeksów lub wektor wartości logicznych określających, które wiersze mają być wybrane. Inną funkcją o podobnym działaniu jest funkcja split(base). Pierwszym argumentem tej funkcji jest ramka danych, a drugim wektor wartości czynnikowych o długości równej liczbie wierszy w ramce danych. Wynikiem działania tej funkcji jest lista ramek danych, której kolejne elementy zawierają ramki danych z wierszami odpowiadającymi tej samej wartości zmiennej czynnikowej (grupującej).