date de agregare și restructurare (de la „R în acțiune”)

următoarea postare introductivă este destinată noilor utilizatori ai R. se ocupă de restructurarea datelor: ce este și cum să o efectuați folosind funcțiile de bază R și pachetul {reshape}.

acesta este un articol invitat de Dr. Robert I. Kabacoff, fondatorul (unul dintre) primele site-uri Tutoriale r online: Quick-R. Kabacoff a publicat recent cartea „R în acțiune”, oferind o prezentare detaliată a limbajului R bazată pe diverse exemple pentru ilustrarea caracteristicilor lui R (manipularea datelor, metode statistice, grafică și așa mai departe…). Postarea anterioară de oaspeți a lui Kabacoff a introdus date.obiecte cadru în R.

pentru cititorii acestui blog, există o reducere de 38% Din cartea „R în acțiune” (precum și toate celelalte cărți electronice, pBooks și MEAP-uri de la Editura Manning), pur și simplu folosind codul rblogg38 atunci când ajungeți la checkout.

să vorbim acum despre agregarea și restructurarea datelor în R:

agregarea și restructurarea

R oferă o serie de metode puternice pentru agregarea și remodelarea datelor. Când agregați date, înlocuiți grupuri de observații cu statistici sumare bazate pe aceste observații. Când remodelați datele, modificați structura (rânduri și coloane) determinând modul în care sunt organizate datele. Acest articol descrie o varietate de metode pentru îndeplinirea acestor sarcini.

vom folosi Cadrul de date mtcars care este inclus cu instalarea de bază a R. acest set de date, extras din revista Motor Trend (1974), descrie caracteristicile de proiectare și performanță (numărul de cilindri, deplasare, cai putere, mpg și așa mai departe) pentru 34 de automobile. Pentru a afla mai multe despre setul de date, consultați Ajutor(mtcars).

Transpose

transpunerea (inversarea rândurilor și coloanelor) este probabil cea mai simplă metodă de remodelare a unui set de date. Utilizați funcția t () pentru a transpune o matrice sau un cadru de date. În ultimul caz, numele rândurilor devin nume variabile (coloane). Un exemplu este prezentat în următoarea listă.

listare 1 transpunerea unui set de date

listare 1 utilizează un subset al setului de date mtcars pentru a economisi spațiu pe pagină. Veți vedea un mod mai flexibil de transpunere a datelor atunci când ne uităm la pachetul de remodelare mai târziu în acest articol.

agregarea datelor

este relativ ușor să restrângeți datele în R folosind una sau mai multe variabile și o funcție definită. Formatul este

1
aggregate(x, by, FUN)

unde x este obiectul de date care urmează să fie prăbușit, by este o listă de variabile care vor fi traversate pentru a forma noile observații, iar FUN este funcția scalară utilizată pentru a calcula statisticile sumare care vor alcătui noile valori de observare.

de exemplu, vom agrega datele mtcars după numărul de cilindri și angrenaje, returnând mijloace pe fiecare dintre variabilele numerice (Vezi următoarea listă).

listarea 2 agregarea datelor

în aceste rezultate, grup.1 reprezintă numărul de cilindri (4, 6 sau și grup.2 reprezintă numărul de trepte de viteză (3, 4 sau 5). De exemplu, mașinile cu 4 cilindri și 3 trepte de viteză au o medie de 21,5 mile pe galon (mpg).

când utilizați funcția aggregate (), variabilele by trebuie să fie într-o listă (chiar dacă există doar una). Puteți declara un nume personalizat pentru grupurile din listă, de exemplu, folosind by=list(Group.cyl = cyl, grup.gears = gear).

Funcția specificată poate fi orice funcție încorporată sau furnizată de utilizator. Acest lucru dă comanda agregată o mare putere. Dar când vine vorba de putere, nimic nu bate pachetul de remodelare.

pachetul remodelare

pachetul remodelare este o abordare extrem de versatilă atât pentru restructurarea, cât și pentru agregarea seturilor de date. Datorită acestei versatilități, poate fi un pic dificil de învățat.

vom parcurge procesul încet și vom folosi un mic set de date, astfel încât să fie clar ce se întâmplă. Deoarece remodelarea nu este inclusă în instalarea standard A R, va trebui să o instalați o singură dată, folosind instalare.pachete („remodelare”).

practic, veți „topi” datele astfel încât fiecare rând să fie o combinație unică id-variabilă. Apoi veți „arunca” datele topite în orice formă doriți. În timpul distribuției, puteți agrega datele cu orice funcție doriți. Setul de date cu care veți lucra este prezentat în tabelul 1.

Tabelul 1 setul de date original (mydata)

ID

timp

X1

X2

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

în acest set de date, măsurătorile sunt valorile din ultimele două coloane (5, 6, 3, 5, 6, 1, 2, și 4). Fiecare măsurare este identificată în mod unic printr-o combinație de variabile ID (în acest caz ID, timp și dacă măsurarea este pe X1 sau X2). De exemplu, valoarea măsurată 5 din primul rând este identificată în mod unic știind că este din observație (ID) 1, la momentul 1 și pe variabila X1.

topire

când topiți un set de date, îl restructurați într-un format în care fiecare variabilă măsurată se află în rândul său, împreună cu variabilele ID necesare pentru a-l identifica în mod unic. Dacă topiți datele din tabelul 1, utilizând următorul cod

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

veți termina cu structura prezentată în tabelul 2.

Tabelul 2 setul de date topit

ID

timp

variabilă

valoare

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

rețineți că trebuie să specificați variabilele necesare pentru a identifica în mod unic fiecare măsurare (ID și timp) și că variabila care indică numele variabilei de măsurare (X1 sau X2) este creată automat pentru dvs.

acum, că aveți datele într-o formă topită, puteți să le reformați în orice formă, utilizând funcția cast ().

Casting

funcția cast() începe cu datele topite și le remodelează folosind o formulă pe care o furnizați și o funcție (opțională) utilizată pentru a agrega datele. Formatul este

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

în cazul în care md este datele topite, formula descrie rezultatul final dorit, iar distracția este funcția de agregare (opțională). Formula ia forma

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

în această formulă, rowvar1 + rowvar2 + … definesc setul de variabile încrucișate care definesc rândurile și colvar1 + colvar2 + … definesc setul de variabile încrucișate care definesc coloanele. Vezi exemplele din Figura 1. (click pentru a mari imaginea)

Figura 1 Remodelarea datelor cu funcțiile melt() și cast ()

deoarece formulele din partea dreaptă (d, E și f) nu includ o funcție, datele sunt remodelate. În schimb, exemplele din partea stângă (a, b și c) specifică media ca funcție de agregare. Astfel, datele nu sunt doar remodelate, ci și agregate. De exemplu, (a) oferă mijloacele pe X1 și X2 medii în timp pentru fiecare observație. Exemplul (b) oferă scorurile medii ale X1 și X2 la ora 1 și ora 2, medii peste observații. În (c) aveți Scorul mediu pentru fiecare observație la ora 1 și ora 2, în medie pe X1 și X2.

după cum puteți vedea, flexibilitatea oferită de funcțiile melt() și cast() este uimitoare. Există de multe ori când va trebui să vă remodelați sau să agregați datele înainte de analiză. De exemplu, de obicei, va trebui să plasați datele în ceea ce se numește format lung asemănător tabelului 2 atunci când analizați date de măsuri repetate (date în care sunt înregistrate mai multe măsuri pentru fiecare observație).

rezumat

Capitolul 5 din R în acțiune analizează multe dintre zecile de funcții matematice, statistice și de probabilitate care sunt utile pentru manipularea datelor. În acest articol, am explorat pe scurt mai multe modalități de agregare și restructurare a datelor.

acest articol a apărut pentru prima dată ca capitolul 5.6 din cartea „R în acțiune” și este publicat cu permisiunea editurii Manning. Alte cărți în acest serios care ar putea fi interesat sunt (a se vedea începutul acestui post pentru un cod de reducere):

  • învățarea automată în acțiune de Peter Harrington
  • Gnuplot în acțiune (înțelegerea datelor cu grafice) de Philipp K. Janert



+