Aggregerings-och Omstruktureringsdata (från ”R in Action”)

följande inledande inlägg är avsett för nya användare av R. Det handlar om omstrukturering av data: vad det är och hur man utför det med bas R-funktioner och {reshape} – paketet.

Detta är en gäst artikel av Dr. Robert I. Kabacoff, grundaren av (en av) de första online r tutorials webbplatser: Quick-R. Kabacoff har nyligen publicerat boken ”R in Action”, som ger en detaljerad genomgång för R-språket baserat på olika exempel för att illustrera R: s funktioner (datamanipulation, statistiska metoder, grafik och så vidare…). Det tidigare gästinlägget av Kabacoff introducerade data.ramobjekt i R.

för läsare av denna blogg finns det 38% rabatt på ”R in Action” – boken (liksom alla andra e-böcker, pBooks och MEAPs på Manning publishing house), helt enkelt genom att använda koden rblogg38 när du når kassan.

Låt oss nu prata om aggregering och omstrukturering av data i R:

aggregering och omstrukturering

r ger ett antal kraftfulla metoder för att aggregera och omforma data. När du sammanställer data ersätter du grupper av observationer med sammanfattande statistik baserad på dessa observationer. När du omformar data ändrar du strukturen (rader och kolumner) som bestämmer hur data är organiserade. I den här artikeln beskrivs en mängd olika metoder för att utföra dessa uppgifter.

vi använder mtcars dataram som ingår i basinstallationen av R. denna dataset, extraherad från Motor Trend magazine (1974), beskriver design och prestandaegenskaper (antal cylindrar, förskjutning, hästkrafter, mpg Och så vidare) för 34 bilar. Om du vill veta mer om datauppsättningen, se hjälp(mtcars).

transponera

transponera (vända rader och kolumner) är kanske den enklaste metoden för att omforma en dataset. Använd funktionen t() för att transponera en matris eller en dataram. I det senare fallet blir radnamn variabla (kolumn) namn. Ett exempel presenteras i nästa lista.

Lista 1 transponering av en dataset

Lista 1 använder en delmängd av mtcars dataset för att spara utrymme på sidan. Du ser ett mer flexibelt sätt att införliva data när vi tittar på reshape-paketet senare i den här artikeln.

aggregerande data

det är relativt enkelt att kollapsa data i R med en eller flera av variabler och en definierad funktion. Formatet är

1
aggregate(x, by, FUN)

där x är dataobjektet som ska kollapsas, är en lista över variabler som kommer att korsas för att bilda de nya observationerna, och kul är skalärfunktionen som används för att beräkna sammanfattande statistik som kommer att utgöra de nya observationsvärdena.

som ett exempel kommer vi att aggregera mtcars-data efter antal cylindrar och växlar, returmedel på var och en av de numeriska variablerna (se nästa lista).

Lista 2 aggregerande data

i dessa resultat, grupp.1 representerar antalet cylindrar (4, 6 eller och grupp.2 representerar antalet växlar (3, 4 eller 5). Till exempel har bilar med 4 cylindrar och 3 växlar ett medelvärde på 21,5 miles per gallon (mpg).

när du använder funktionen aggregate() måste by-variablerna finnas i en lista (även om det bara finns en). Du kan deklarera ett eget namn för grupperna från listan, till exempel med hjälp av by=list(Group.cyl=cyl, grupp.växlar=växel).

den angivna funktionen kan vara vilken som helst inbyggd eller användartillhandahållen funktion. Detta ger det sammanlagda kommandot mycket kraft. Men när det gäller makt slår ingenting reshape-paketet.

reshape-paketet

reshape-paketet är ett oerhört mångsidigt tillvägagångssätt för både omstrukturering och aggregering av dataset. På grund av denna mångsidighet kan det vara lite utmanande att lära sig.

vi går igenom processen långsamt och använder en liten dataset så att det är klart vad som händer. Eftersom reshape inte ingår i standardinstallationen av R måste du installera den en gång med install.paket(”omforma”).

i grund och botten kommer du att” smälta ” data så att varje rad är en unik ID-variabel kombination. Då kommer du att” kasta ” de smälta data i vilken form du önskar. Under gjutningen kan du aggregera data med vilken funktion du vill. Datauppsättningen du kommer att arbeta med visas i tabell 1.

Tabell 1 den ursprungliga datamängden (mydata)

ID

tid

X1

X2

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

i denna dataset är mätningarna värdena i de två sista kolumner (5, 6, 3, 5, 6, 1, 2, och 4). Varje mätning identifieras unikt med en kombination av ID-variabler (i detta fall ID, tid och om mätningen är på X1 eller X2). Till exempel identifieras det uppmätta värdet 5 i den första raden unikt genom att veta att det är från observation (ID) 1, Vid tid 1 och på variabel X1.

smältning

när du smälter en dataset omstrukturerar du den till ett format där varje uppmätt variabel finns i sin egen rad, tillsammans med de ID-variabler som behövs för att unikt identifiera den. Om du smälter data från Tabell 1, med hjälp av följande kod

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

du slutar med strukturen som visas i tabell 2.

Tabell 2 den smälta datamängden

ID

tid

variabel

värde

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

Observera att du måste ange de variabler som behövs för att unikt identifiera varje mätning (ID och tid) och att variabeln som anger mätvariabelnamnen (X1 eller X2) skapas automatiskt åt dig.

nu när du har dina data i smält form kan du omarbeta den till vilken form som helst med funktionen cast ().

Casting

funktionen cast() börjar med smält data och omformar den med en formel som du tillhandahåller och en (valfri) funktion som används för att aggregera data. Formatet är

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

där md är den smälta data, formel beskriver det önskade slutresultatet, och roligt är (tillval) aggregerande funktion. Formeln tar formen

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

i denna formel definierar rowvar1 + rowvar2 + … uppsättningen korsade variabler som definierar raderna, och colvar1 + colvar2 + … definierar uppsättningen korsade variabler som definierar kolumnerna. Se exemplen i Figur 1. (klicka för att förstora bilden)

Figur 1 omforma data med funktionerna melt() och cast ()

eftersom formlerna på höger sida (d, e och f) inte innehåller en funktion, omformas data. Däremot anger exemplen på vänster sida (a, b och c) medelvärdet som en aggregeringsfunktion. Således omformas uppgifterna inte bara utan aggregeras också. Till exempel, (A) ger medel på X1 och X2 i genomsnitt över tiden för varje observation. Exempel (b) ger medelvärdet av X1 och X2 vid Tid 1 och tid 2, i genomsnitt över observationer. I (c) har du medelvärdet för varje observation vid Tid 1 och tid 2, i genomsnitt över X1 och X2.

som du kan se är flexibiliteten från funktionerna melt() och cast () fantastisk. Det finns många gånger när du måste omforma eller aggregera dina data före analysen. Till exempel måste du vanligtvis placera dina data i det som kallas långt format som liknar tabell 2 när du analyserar upprepade mätdata (data där flera åtgärder registreras för varje observation).

sammanfattning

Kapitel 5 i r in Action granskar många av dussintals matematiska, statistiska och sannolikhetsfunktioner som är användbara för att manipulera data. I den här artikeln har vi kortfattat undersökt flera sätt att aggregera och omstrukturera data.

denna artikel uppträdde först som kapitel 5.6 från boken” R in action ” och publiceras med tillstånd från Manning publishing house. Andra böcker i denna allvarliga som du kanske är intresserad av är (Se början av detta inlägg för en rabattkod):

  • maskininlärning i aktion av Peter Harrington
  • Gnuplot i aktion (förstå Data med grafer) av Philipp K. Janert



+