Aggregations- und Restrukturierungsdaten (aus „R in Action“)

Der folgende einleitende Beitrag richtet sich an neue Benutzer von R. Er befasst sich mit der Umstrukturierung von Daten: Was es ist und wie es mit Basis-R-Funktionen und dem Paket {reshape} ausgeführt wird.

Dies ist ein Gastbeitrag von Dr. Robert I. Kabacoff, dem Gründer von (einer der) ersten Online-R-Tutorials-Websites: Quick-R. Kabacoff hat kürzlich das Buch „R in Action“ veröffentlicht, das einen detaillierten Überblick über die R-Sprache bietet, der auf verschiedenen Beispielen zur Veranschaulichung der Funktionen von R basiert (Datenmanipulation, statistische Methoden, Grafiken usw.). Der vorherige Gastbeitrag von Kabacoff stellte Daten vor.rahmenobjekte in R.

Für Leser dieses Blogs gibt es einen Rabatt von 38% auf das Buch „R in Action“ (sowie alle anderen eBooks, pBooks und MEAPs im Manning Publishing House), indem Sie einfach den Code verwenden rblogg38 beim Erreichen der Kasse.

Lassen Sie uns nun über die Aggregation und Umstrukturierung von Daten in R sprechen:

Aggregation und Umstrukturierung

R bietet eine Reihe leistungsfähiger Methoden zum Aggregieren und Umformen von Daten. Wenn Sie Daten aggregieren, ersetzen Sie Beobachtungsgruppen durch zusammenfassende Statistiken, die auf diesen Beobachtungen basieren. Wenn Sie Daten umformen, ändern Sie die Struktur (Zeilen und Spalten) und bestimmen, wie die Daten organisiert sind. Dieser Artikel beschreibt eine Vielzahl von Methoden zum Ausführen dieser Aufgaben.

Wir verwenden den mtcars-Datenrahmen, der in der Basisinstallation von R enthalten ist. Dieser Datensatz, der aus dem Motor Trend Magazine (1974) extrahiert wurde, beschreibt die Konstruktions- und Leistungsmerkmale (Zylinderzahl, Hubraum, PS, MPG usw.) für 34 Automobile. Weitere Informationen zum Datensatz finden Sie unter Hilfe(mtcars).

Transponieren

Die Transponierung (Umkehren von Zeilen und Spalten) ist möglicherweise die einfachste Methode zum Umformen eines Datensatzes. Verwenden Sie die Funktion t(), um eine Matrix oder einen Datenrahmen zu transponieren. Im letzteren Fall werden Zeilennamen zu variablen (Spalten-) Namen. Ein Beispiel wird in der nächsten Auflistung vorgestellt.

Listing 1 Transponieren eines Datensatzes

Listing 1 verwendet eine Teilmenge des mtcars-Datensatzes, um Platz auf der Seite zu sparen. Sie werden eine flexiblere Art der Transponierung von Daten sehen, wenn wir uns das Reshape-Paket später in diesem Artikel ansehen.

Aggregieren von Daten

Es ist relativ einfach, Daten in R mithilfe einer oder mehrerer by-Variablen und einer definierten Funktion zu reduzieren. Das Format ist

1
aggregate(x, by, FUN)

dabei ist x das zu reduzierende Datenobjekt, by eine Liste von Variablen, die zur Bildung der neuen Beobachtungen gekreuzt werden, und FUN die Skalarfunktion, mit der zusammenfassende Statistiken berechnet werden, aus denen die neuen Beobachtungswerte bestehen.

Als Beispiel aggregieren wir die mtcars-Daten nach Anzahl der Zylinder und Gänge und geben Mittelwerte für jede der numerischen Variablen zurück (siehe nächste Auflistung).

Listing 2 Aggregating data

In diesen Ergebnissen, Gruppe.1 steht für die Anzahl der Zylinder (4, 6 oder und Gruppe.2 steht für die Anzahl der Gänge (3, 4 oder 5). Zum Beispiel haben Autos mit 4 Zylindern und 3 Gängen einen Mittelwert von 21,5 Meilen pro Gallone (mpg).

Wenn Sie die Funktion aggregate() verwenden, müssen sich die by-Variablen in einer Liste befinden (auch wenn es nur eine gibt). Sie können einen benutzerdefinierten Namen für die Gruppen innerhalb der Liste deklarieren, z. B. mit by=list(Group .cyl=cyl, Gruppe.zahnräder =Getriebe).

Die angegebene Funktion kann eine beliebige integrierte oder vom Benutzer bereitgestellte Funktion sein. Dies gibt dem Aggregatbefehl viel Macht. Aber wenn es um Macht geht, geht nichts über das Reshape-Paket.

Das Reshape-Paket

Das Reshape-Paket ist ein äußerst vielseitiger Ansatz zur Umstrukturierung und Aggregation von Datensätzen. Aufgrund dieser Vielseitigkeit kann es etwas schwierig sein, es zu lernen.

Wir gehen den Prozess langsam durch und verwenden einen kleinen Datensatz, damit klar ist, was passiert. Da reshape nicht in der Standardinstallation von R enthalten ist, müssen Sie es einmal mit install installieren.pakete(„umformen“).

Grundsätzlich „schmelzen“ Sie Daten, sodass jede Zeile eine eindeutige ID-Variable-Kombination ist. Dann „werfen“ Sie die geschmolzenen Daten in jede gewünschte Form. Während der Besetzung können Sie die Daten mit jeder gewünschten Funktion aggregieren. Der Datensatz, mit dem Sie arbeiten, ist in Tabelle 1 dargestellt.

Tabelle 1 Der ursprüngliche Datensatz (mydata)

ID

Zeit

X1

X2

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

In diesem Datensatz sind die Messungen die Werte in den letzten beiden spalten (5, 6, 3, 5, 6, 1, 2, und 4). Jede Messung wird durch eine Kombination von ID-Variablen eindeutig identifiziert (in diesem Fall ID, Zeit und ob die Messung auf X1 oder X2 erfolgt). Beispielsweise wird der Messwert 5 in der ersten Zeile eindeutig identifiziert, indem bekannt wird, dass er von Beobachtung (ID) 1, zum Zeitpunkt 1 und von der Variablen X1 stammt.

Melting

Wenn Sie einen Datensatz schmelzen, strukturieren Sie ihn in ein Format um, in dem sich jede Messvariable in einer eigenen Zeile befindet, zusammen mit den ID-Variablen, die zur eindeutigen Identifizierung erforderlich sind. Wenn Sie die Daten aus Tabelle 1 schmelzen, verwenden Sie den folgenden Code

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

Sie erhalten die in Tabelle 2 gezeigte Struktur.

Tabelle 2 Der geschmolzene Datensatz

ID

Zeit

Variabel

Wert

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

Beachten Sie, dass Sie die Variablen angeben müssen, die zur eindeutigen Identifizierung jeder Messung erforderlich sind (ID und Zeit), und dass die Variable mit den Messvariablennamen (X1 oder X2) automatisch für Sie erstellt wird.

Nun, da Sie Ihre Daten in einer geschmolzenen Form haben, können Sie sie mit der Funktion cast() in eine beliebige Form umformen.

Casting

Die Funktion cast() beginnt mit geschmolzenen Daten und formt sie mithilfe einer von Ihnen angegebenen Formel und einer (optionalen) Funktion zum Aggregieren der Daten neu. Das Format ist

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

Wobei md die geschmolzenen Daten sind, formula das gewünschte Endergebnis beschreibt und FUN die (optionale) Aggregationsfunktion ist. Die Formel hat die Form

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

In dieser Formel definieren rowvar1 + rowvar2 + … die Menge der gekreuzten Variablen, die die Zeilen definieren, und colvar1 + colvar2 + … die Menge der gekreuzten Variablen, die die Spalten definieren. Siehe die Beispiele in Abbildung 1. (klicken, um das Bild zu vergrößern)

Abbildung 1 Umformen von Daten mit den Funktionen melt() und cast()

Da die Formeln auf der rechten Seite (d, e und f) keine Funktion enthalten, werden die Daten umformt. Im Gegensatz dazu geben die Beispiele auf der linken Seite (a, b und c) den Mittelwert als Aggregationsfunktion an. Somit werden die Daten nicht nur umgestaltet, sondern auch aggregiert. Zum Beispiel gibt (a) die Mittelwerte auf X1 und X2 gemittelt über die Zeit für jede Beobachtung. Beispiel (b) gibt die mittleren Werte von X1 und X2 zum Zeitpunkt 1 und zum Zeitpunkt 2, gemittelt über Beobachtungen. In (c) haben Sie die mittlere Punktzahl für jede Beobachtung zum Zeitpunkt 1 und zum Zeitpunkt 2, gemittelt über X1 und X2.

Wie Sie sehen, ist die Flexibilität der Funktionen melt() und cast() erstaunlich. Es gibt viele Fälle, in denen Sie Ihre Daten vor der Analyse neu gestalten oder aggregieren müssen. Beispielsweise müssen Sie Ihre Daten normalerweise in einem so genannten Long-Format wie Tabelle 2 ablegen, wenn Sie Daten mit wiederholten Messungen analysieren (Daten, bei denen für jede Beobachtung mehrere Messungen aufgezeichnet werden).

Zusammenfassung

In Kapitel 5 von R in Aktion werden viele der Dutzenden mathematischer, statistischer und Wahrscheinlichkeitsfunktionen beschrieben, die zum Bearbeiten von Daten nützlich sind. In diesem Artikel haben wir kurz verschiedene Möglichkeiten zum Aggregieren und Umstrukturieren von Daten untersucht.

Dieser Artikel erschien zuerst als Kapitel 5.6 aus dem Buch „R in action“ und wird mit Genehmigung des Manning Publishing House veröffentlicht. Andere Bücher in dieser Kategorie, die Sie interessieren könnten, sind (siehe den Anfang dieses Beitrags für einen Rabattcode):

  • Maschinelles Lernen in Aktion von Peter Harrington
  • Gnuplot in Aktion (Daten mit Graphen verstehen) von Philipp K. Janert



+