de volgende inleidende post is bedoeld voor nieuwe gebruikers van R. Het behandelt de herstructurering van gegevens: wat het is en hoe het uit te voeren met behulp van basis R-functies en het {reshape} – pakket.
Dit is een gastartikel van Dr. Robert I. Kabacoff, de oprichter van (een van) de eerste online R tutorials websites: Quick-R. Kabacoff heeft onlangs het boek “R in Action” gepubliceerd, dat een gedetailleerde doorloop biedt voor de R-taal op basis van verschillende voorbeelden voor het illustreren van R ‘ S functies (data manipulatie, statistische methoden, grafieken, enzovoort…). De vorige gastpost door Kabacoff introduceerde data.frame-objecten in R.
voor lezers van dit blog is er een korting van 38% op het “R in Action” – boek (evenals alle andere eBooks, pBooks en MEAPs bij Manning publishing house), gewoon door de code rblogg38 te gebruiken bij het bereiken van de kassa.
laten we het nu hebben over de samenvoeging en herstructurering van gegevens in R:
aggregatie en herstructurering
R biedt een aantal krachtige methoden voor het aggregeren en hervormen van gegevens. Wanneer u gegevens samenvoegt, vervangt u groepen waarnemingen door samenvattende statistieken op basis van die waarnemingen. Wanneer u gegevens opnieuw vormgeeft, wijzigt u de structuur (rijen en kolommen) die bepaalt hoe de gegevens worden georganiseerd. Dit artikel beschrijft een verscheidenheid aan methoden voor het vervullen van deze taken.
we zullen het mtcars-dataframe gebruiken dat is meegeleverd bij de basisinstallatie van R. deze dataset, geëxtraheerd uit Motor Trend magazine (1974), beschrijft het ontwerp en de prestatiekenmerken (aantal cilinders, verplaatsing, pk, mpg, enzovoort) voor 34 Auto ‘ s. Zie help(mtcars) voor meer informatie over de dataset.
transponeren
transponeren (omkeren van rijen en kolommen) is misschien wel de eenvoudigste methode om een dataset te hervormen. Gebruik de functie t() om een matrix of een dataframe te transponeren. In het laatste geval worden rijnamen variabele (kolom) namen. In de volgende lijst wordt een voorbeeld gegeven.
Listing 1 transponeren van een dataset
Listing 1 gebruikt een subset van de mtcars-dataset om ruimte op de pagina te besparen. U zult een meer flexibele manier van transponeren van gegevens zien als we kijken naar het reshape pakket later in dit artikel.
aggregeren van gegevens
het is relatief eenvoudig om gegevens in R samen te voegen met behulp van een of meer variabelen en een gedefinieerde functie. Het formaat is
1 |
aggregate(x, by, FUN) |
waarbij x het gegevensobject is dat moet worden ingeklapt, door is een lijst van variabelen die zullen worden gekruist om de nieuwe waarnemingen te vormen, en plezier is de scalaire functie die wordt gebruikt om samenvattende statistieken te berekenen die de nieuwe waarnemingswaarden zullen vormen.
als voorbeeld aggregeren we de mtcars-gegevens op basis van het aantal cilinders en tandwielen, waarbij we de middelen op elk van de numerieke variabelen retourneren (zie de volgende lijst).
2 Aggregatiegegevens
in deze resultaten, Groep.1 staat voor het aantal cilinders (4, 6 of en de groep.2 staat voor het aantal versnellingen (3, 4 of 5). Bijvoorbeeld, auto ‘ s met 4 cilinders en 3 versnellingen hebben een gemiddelde van 21.5 mijl per gallon (mpg).
wanneer u de functie aggregate() gebruikt, moet de BY variables in een lijst staan (zelfs als er maar één is). U kunt een aangepaste naam declareren voor de groepen vanuit de lijst, bijvoorbeeld met behulp van by=list(Group.cyl = cyl, Groep.versnellingen=versnelling).
de opgegeven functie kan elke ingebouwde of door de gebruiker geleverde functie zijn. Dit geeft het totale Commando veel macht. Maar als het op macht aankomt, gaat er niets boven het reshape pakket.
het reshape-pakket
het reshape-pakket is een enorm veelzijdige benadering van zowel het herstructureren als het aggregeren van datasets. Vanwege deze veelzijdigheid, het kan een beetje uitdagend om te leren.
we zullen het proces langzaam doorlopen en een kleine dataset gebruiken zodat duidelijk is wat er gebeurt. Omdat reshape niet is opgenomen in de standaard installatie van R, je nodig hebt om het te installeren een keer, met behulp van installeren.pakketten (“reshape”).
in principe “smelt” u gegevens zodat elke rij een unieke ID-variabele combinatie is. Dan “giet” je de gesmolten gegevens in elke gewenste vorm. Tijdens de cast kunt u de gegevens samenvoegen met elke functie die u wilt. De dataset waarmee u gaat werken wordt weergegeven in Tabel 1.
Tabel 1 zijn De originele dataset (mydata)
ID |
Tijd |
X1 |
X2 |
1 | 1 | 5 | 6 |
1 | 2 | 3 | 5 |
2 | 1 | 6 | 1 |
2 | 2 | 2 | 4 |
In deze dataset zijn de metingen zijn de waarden in de laatste twee kolommen (5, 6, 3, 5, 6, 1, 2, en 4). Elke meting wordt uniek geïdentificeerd door een combinatie van ID-variabelen (in dit geval ID, tijd en of de meting op X1 of X2 is). Bijvoorbeeld, de gemeten waarde 5 in de eerste rij is uniek geïdentificeerd door te weten dat het uit observatie (ID) 1, op tijd 1, en op variabele X1.
smelten
wanneer u een dataset smelt, herstructureert u deze in een formaat waarin elke gemeten variabele zich in zijn eigen rij bevindt, samen met de ID-variabelen die nodig zijn om deze uniek te identificeren. Als u de gegevens uit Tabel 1 smelt, gebruik dan de volgende code
12 |
library(reshape)md <- melt(mydata, id=(c("id", "time"))) |
je eindigt met de structuur in Tabel 2.
Tabel 2 De gesmolten dataset
ID |
Tijd |
Variabele |
Waarde |
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 |
Let op: u moet opgeven van de variabelen die nodig zijn voor unieke identificatie van elke meting (ID en Tijd) en dat de variabele die aangeeft dat de meting van de variabele-namen (X1 of X2) is gemaakt voor u automatisch.
Nu u uw gegevens in een gesmolten vorm hebt, kunt u deze herschikken in elke vorm, met behulp van de functie cast ().
Casting
de functie cast() begint met gesmolten gegevens en herschikt deze met behulp van een formule die u opgeeft en een (optionele) functie die wordt gebruikt om de gegevens samen te voegen. Het formaat is
1 |
newdata <- cast(md, formula, FUN) |
waar md de gesmolten gegevens is, beschrijft formule het gewenste eindresultaat, en plezier is de (optionele) aggregerende functie. De formule neemt de vorm aan
1 |
rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + … |
in deze formule definieert rowvar1 + rowvar2 + … de set van gekruiste variabelen die de rijen definiëren, en colvar1 + colvar2 + … definieert de set van gekruiste variabelen die de kolommen definiëren. Zie de voorbeelden in figuur 1. (klik om de afbeelding te vergroten))
figuur 1 gegevens opnieuw vormgeven met de functies melt() en cast ()
omdat de formules aan de rechterkant (d, e en f) geen functie bevatten, worden de gegevens opnieuw vormgegeven. In tegenstelling, de voorbeelden aan de linkerkant (a, b, en c) specificeren het gemiddelde als een aggregerende functie. Zo worden de gegevens niet alleen hervormd, maar ook geaggregeerd. Bijvoorbeeld, (a) geeft de gemiddelden op X1 en X2 in de tijd voor elke waarneming. Voorbeeld (b) geeft de gemiddelde scores van X1 en X2 op tijd 1 en tijd 2, gemiddeld over waarnemingen. In (c) heb je de gemiddelde score voor elke waarneming op tijd 1 en tijd 2, gemiddeld over X1 en X2.
zoals u kunt zien, is de flexibiliteit van de functies melt () en cast () verbazingwekkend. Er zijn vele malen wanneer u zult moeten hervormen of aggregeren van uw gegevens voorafgaand aan de analyse. Bijvoorbeeld, u zult meestal nodig hebben om uw gegevens te plaatsen in wat wordt genoemd lange formaat lijkt op Tabel 2 bij het analyseren van herhaalde metingen gegevens (Gegevens waarbij meerdere metingen worden geregistreerd voor elke waarneming).
samenvatting
hoofdstuk 5 van R in Action geeft een overzicht van veel van de tientallen wiskundige, statistische en waarschijnlijkheidsfuncties die nuttig zijn voor het manipuleren van gegevens. In dit artikel hebben we kort verschillende manieren onderzocht om gegevens te aggregeren en te herstructureren.
dit artikel verscheen voor het eerst als hoofdstuk 5.6 uit het boek “R in action” en is gepubliceerd met toestemming van Manning publishing house. Andere boeken in deze ernstige die u misschien geïnteresseerd in zijn (zie het begin van dit bericht voor een kortingscode):
- Machine Learning in actie door Peter Harrington
- Gnuplot in Actie (gegevens met grafieken begrijpen) door Philipp K. Janert