agregacja i Restrukturyzacja danych (od „R w działaniu”)

poniższy post wprowadzający jest przeznaczony dla nowych użytkowników R. zajmuje się restrukturyzacją danych: co to jest i jak go wykonać za pomocą funkcji base R i pakietu {reshape}.

jest to artykuł gościnny dr. Roberta I. Kabacoffa, założyciela (jednego z) pierwszych internetowych stron z samouczkami R: Quick-R. Kabacoff opublikował niedawno książkę „R w działaniu”, dostarczając szczegółowego omówienia języka R w oparciu o różne przykłady ilustrujące cechy języka R (manipulacja danymi, metody statystyczne, grafika itp.). Poprzedni wpis gościnny autorstwa Kabacoffa wprowadził dane.obiekty ramkowe w R.

dla czytelników tego bloga, istnieje 38% zniżki na książkę” R w akcji ” (jak również wszystkie inne ebooki, pbooki i Meapy w wydawnictwie Manning), po prostu za pomocą kodu rblogg38 po dotarciu do kasy.

porozmawiajmy teraz o agregacji i restrukturyzacji danych w R:

agregacja i Restrukturyzacja

r zapewnia szereg zaawansowanych metod agregowania i przekształcania danych. Gdy agregujesz dane, zastępujesz grupy obserwacji zbiorczymi statystykami bazującymi na tych obserwacjach. Podczas przekształcania danych zmienia się strukturę (wiersze i kolumny) określającą sposób organizacji danych. W tym artykule opisano najróżniejsze metody realizacji tych zadań.

użyjemy ramki danych mtcars dołączonej do podstawowej instalacji R. Ten zestaw danych, zaczerpnięty z magazynu Motor Trend (1974), opisuje charakterystykę konstrukcyjną i osiągową (liczba cylindrów, przemieszczenie, moc, mpg itd.) Dla 34 samochodów. Aby dowiedzieć się więcej o zestawie danych, zobacz Pomoc(mtcars).

Transpozycja

transpozycja (odwracanie wierszy i kolumn) jest prawdopodobnie najprostszą metodą przekształcania zbioru danych. Użyj funkcji t () do transponowania macierzy lub ramki danych. W tym drugim przypadku nazwy wierszy stają się nazwami zmiennych (kolumn). Przykład jest przedstawiony w następnym zestawieniu.

Listing 1 transponowanie zbioru danych

Listing 1 wykorzystuje podzbiór zbioru danych mtcars w celu oszczędzania miejsca na stronie. Zobaczysz bardziej elastyczny sposób transponowania danych, gdy przyjrzymy się pakietowi przekształcania w dalszej części tego artykułu.

agregowanie danych

relatywnie łatwo jest zwinąć dane w R przy użyciu jednej lub więcej zmiennych i zdefiniowanej funkcji. Format jest

1
aggregate(x, by, FUN)

gdzie x jest obiektem danych, który ma zostać zwinięty, by jest listą zmiennych, które zostaną przekreślone w celu utworzenia nowych obserwacji, a FUN jest funkcją skalarną używaną do obliczania statystyk sumarycznych, które tworzą nowe wartości obserwacji.

jako przykład, zagregujemy dane mtcars według liczby cylindrów i biegów, zwracając środki na każdej ze zmiennych numerycznych (patrz następna lista).

Lista 2 danych zbiorczych

w tych wynikach, Grupa.1 oznacza liczbę cylindrów (4, 6 lub i Grupę.2 oznacza liczbę biegów (3, 4 lub 5). Na przykład samochody z 4 cylindrami i 3 biegami mają średnią 21,5 mil na galon (mpg).

gdy używasz funkcji aggregate (), zmienne by muszą znajdować się na liście (nawet jeśli jest tylko jedna). Możesz zadeklarować niestandardową nazwę dla grup z listy, na przykład używając by = list(Grupa.cyl=cyl, Grupa.gears=bieg).

określona funkcja może być dowolną funkcją wbudowaną lub dostarczoną przez użytkownika. Daje to zagregowanemu dowództwu ogromną władzę. Ale jeśli chodzi o moc, nic nie przebije pakietu zmiany kształtu.

pakiet reshape

pakiet reshape jest niezwykle wszechstronnym podejściem zarówno do restrukturyzacji, jak i agregowania zbiorów danych. Ze względu na tę wszechstronność nauka może być nieco trudna.

przejdziemy przez proces powoli i użyjemy małego zbioru danych, aby było jasne, co się dzieje. Ponieważ reshape nie jest zawarty w standardowej instalacji R, musisz zainstalować go jeden raz, używając install.Pakiety („reshape”).

zasadniczo „stopisz” dane tak, że każdy wiersz jest unikalną kombinacją zmiennej ID. Następnie” rzucisz ” stopione dane na dowolny kształt. Podczas obsady możesz agregować dane za pomocą dowolnej funkcji. Zestaw danych, z którym będziesz pracować, jest pokazany w tabeli 1.

Tabela 1 oryginalny zestaw danych (mydata)

ID

czas

X1

X2

1 1 5 6
1 2 3 5
2 1 6 1
2 2 2 4

w tym zbiorze danych, pomiary są wartościami w dwóch ostatnich kolumny (5, 6, 3, 5, 6, 1, 2, i 4). Każdy pomiar jest jednoznacznie identyfikowany przez kombinację zmiennych ID (w tym przypadku ID, czas i to, czy pomiar jest na X1, czy X2). Na przykład zmierzona wartość 5 w pierwszym wierszu jest jednoznacznie identyfikowana, wiedząc, że pochodzi z obserwacji (ID) 1, w czasie 1 i na zmiennej X1.

topienie

kiedy topisz zbiór danych, przekształcasz go do formatu, w którym każda zmierzona zmienna znajduje się we własnym wierszu, wraz ze zmiennymi ID potrzebnymi do jednoznacznej identyfikacji. Jeśli stopisz dane z tabeli 1, używając następującego kodu

12
library(reshape)md <- melt(mydata, id=(c("id", "time")))

kończy się to strukturą przedstawioną w tabeli 2.

Tabela 2

ID

czas

zmienna

wartość

1 1 X1 5
1 2 X1 3
2 1 X1 6
2 2 X1 2
1 1 X2 6
1 2 X2 5
2 1 X2 1
2 2 X2 4

pamiętaj, że musisz określić zmienne potrzebne do jednoznacznej identyfikacji każdego pomiaru (ID i czas) oraz że zmienna wskazująca nazwy zmiennych pomiarowych (X1 lub X2) zostanie utworzona dla ciebie automatycznie.

teraz, gdy masz swoje dane w stopionej formie, możesz przekształcić je w dowolny kształt, używając funkcji cast ().

Casting

funkcja cast() rozpoczyna się od stopionych danych i przekształca je za pomocą podanej formuły i (opcjonalnej) funkcji używanej do agregowania danych. Format jest

1
newdata <- cast(md, formula, FUN)

gdzie md jest stopionymi danymi, formuła opisuje pożądany wynik końcowy, a FUN jest (opcjonalną) funkcją agregującą. Wzór przyjmuje postać

1
rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + …

w tej formule, rowvar1 + rowvar2 + … definiują zbiór skrzyżowanych zmiennych, które definiują wiersze, a colvar1 + colvar2 + … definiują zbiór skrzyżowanych zmiennych, które definiują kolumny. Zobacz przykłady na rysunku 1. (Kliknij aby powiększyć zdjęcie)

Rysunek 1 przekształcanie danych za pomocą funkcji melt() i cast ()

ponieważ formuły po prawej stronie (d, e i f) nie zawierają funkcji, dane są przekształcane. Natomiast przykłady po lewej stronie (a, b i c) określają średnią jako funkcję agregującą. W ten sposób dane są nie tylko przekształcane, ale również agregowane. Na przykład, (a) daje średnie na X1 i X2 uśrednione w czasie dla każdej obserwacji. Przykład (B) podaje średnie wyniki X1 i X2 w czasie 1 i czasie 2, uśrednione na podstawie obserwacji. W (c) masz średni wynik dla każdej obserwacji w czasie 1 i czasie 2, uśredniony przez X1 i X2.

jak widać, elastyczność funkcji melt () i cast() jest niesamowita. Istnieje wiele razy, gdy będziesz musiał zmienić kształt lub agregować dane przed analizą. Na przykład podczas analizowania danych powtarzanych pomiarów (danych, w których zapisanych jest wiele miar dla każdej obserwacji), zwykle konieczne jest umieszczenie danych w tzw. długim formacie przypominającym tabelę 2.

podsumowanie

Rozdział 5 R in Action zawiera przegląd wielu funkcji matematycznych, statystycznych i prawdopodobieństwa, które są przydatne do manipulowania danymi. W tym artykule krótko zbadaliśmy kilka sposobów agregowania i restrukturyzacji danych.

ten artykuł pojawił się po raz pierwszy jako rozdział 5.6 z książki „R w akcji” i został opublikowany za zgodą wydawnictwa Manning. Inne książki w tym poważne, które mogą Cię zainteresować są (patrz początek tego postu, aby uzyskać kod rabatowy):

  • Uczenie maszynowe w działaniu Peter Harrington
  • Gnuplot w akcji (zrozumienie danych z wykresami) Philipp K. Janert



+