følgende indledende indlæg er beregnet til nye brugere af R. Det beskæftiger sig med omstrukturering af data: hvad det er, og hvordan man udfører det ved hjælp af base r-funktioner og {reshape} – pakken.
dette er en gæst artikel af Dr. Robert I. Kabacoff, grundlæggeren af (en af) de første online r tutorials hjemmesider: hurtig-R. Kabacoff har for nylig udgivet bogen” R in Action”, der giver en detaljeret gennemgang af R-sproget baseret på forskellige eksempler til illustration af R ‘ S Funktioner (datamanipulation, statistiske metoder, grafik og så videre…). Det tidligere gæstepost af Kabacoff introducerede data.ramme objekter i R.
for læsere af denne blog er der 38% rabat på “R In Action” – bogen (såvel som alle andre e-bøger, pBooks og MEAPs hos Manning publishing house) ved blot at bruge koden rblogg38, når du når kassen.
lad os nu tale om sammenlægning og omstrukturering af data i R:
aggregering og omstrukturering
R giver en række effektive metoder til aggregering og omformning af data. Når du samler data, erstatter Du grupper af observationer med sammenfattende statistikker baseret på disse observationer. Når du omformer data, ændrer du strukturen (rækker og kolonner), der bestemmer, hvordan dataene er organiseret. Denne artikel beskriver en række metoder til udførelse af disse opgaver.
vi bruger mtcars-datarammen, der følger med baseinstallationen af R. dette datasæt, ekstraheret fra magasinet Motor Trend (1974), beskriver design og ydeevneegenskaber (antal cylindre, forskydning, hestekræfter, mpg osv.) Til 34 biler. Hvis du vil vide mere om datasættet, skal du se Hjælp(mtcars).
transponere
transponeringen (reversering af rækker og kolonner) er måske den enkleste metode til omformning af et datasæt. Brug funktionen t () til at transponere en matrice eller en dataramme. I sidstnævnte tilfælde bliver rækkenavne variable (kolonne) navne. Et eksempel er præsenteret i den næste liste.
liste 1 transponering af et datasæt
liste 1 bruger en delmængde af mtcars-datasættet for at spare plads på siden. Du får vist en mere fleksibel måde at transponere data på, når vi ser på omformningspakken senere i denne artikel.
Aggregerende data
det er relativt nemt at skjule data i R ved hjælp af en eller flere af variabler og en defineret funktion. Formatet er
1 |
aggregate(x, by, FUN) |
ved er en liste over variabler, der krydses for at danne de nye observationer, og FUN er den skalære funktion, der bruges til at beregne sammenfattende statistikker, der udgør de nye observationsværdier.
som et eksempel samler vi mtcars-dataene efter antal cylindre og gear, returmidler på hver af de numeriske variabler (se den næste liste).
notering 2 Aggregerende data
i disse resultater, gruppe.1 repræsenterer antallet af cylindre (4, 6 eller og gruppe.2 repræsenterer antallet af gear (3, 4 eller 5). For eksempel har biler med 4 cylindre og 3 gear et gennemsnit på 21,5 miles per gallon (mpg).
når du bruger funktionen aggregat (), skal variablerne efter være på en liste (selvom der kun er en). Du kan angive et brugerdefineret navn for grupperne fra listen, f.eks. ved hjælp af by=list(Group.cyl=cyl, gruppe.gear=gear).
den angivne funktion kan være en hvilken som helst indbygget eller brugerforsynet funktion. Dette giver den samlede kommando en stor magt. Men når det kommer til magt, slår intet omformningspakken.
omformningspakken
omformningspakken er en utrolig alsidig tilgang til både omstrukturering og aggregering af datasæt. På grund af denne alsidighed kan det være lidt udfordrende at lære.
vi gennemgår processen langsomt og bruger et lille datasæt, så det er klart, hvad der sker. Da omformning ikke er inkluderet i standardinstallationen af R, skal du installere den en gang ved hjælp af Installer.pakker (“omforme”).
dybest set vil du “smelte” data, så hver række er en unik ID-variabel kombination. Så vil du” kaste ” de smeltede data i enhver form, du ønsker. Under rollebesætningen kan du samle dataene med enhver funktion, du ønsker. Det datasæt, du skal arbejde med, er vist i tabel 1.
tabel 1 det oprindelige datasæt (mydata)
ID |
tid |
1 |
2 |
1 | 1 | 5 | 6 |
1 | 2 | 3 | 5 |
2 | 1 | 6 | 1 |
2 | 2 | 2 | 4 |
i dette datasæt er målingerne værdierne i de sidste to kolonner (5, 6, 3, 5, 6, 1, 2, og 4). Hver måling identificeres entydigt ved hjælp af en kombination af ID-variabler (i dette tilfælde ID, tid og om målingen er på 1 eller 2). For eksempel identificeres den målte værdi 5 i den første række entydigt ved at vide, at den er fra observation (ID) 1, på tid 1 og på variabel H1.
smeltning
når du smelter et datasæt, omstrukturerer du det til et format, hvor hver målt variabel er i sin egen række sammen med de ID-variabler, der er nødvendige for entydigt at identificere det. Hvis du smelter dataene fra tabel 1 ved hjælp af følgende kode
12 |
library(reshape)md <- melt(mydata, id=(c("id", "time"))) |
du ender med strukturen vist i tabel 2.
tabel 2 det smeltede datasæt
ID |
tid |
variabel |
værdi |
1 | 1 | 1 | 5 |
1 | 2 | 1 | 3 |
2 | 1 | 1 | 6 |
2 | 2 | 1 | 2 |
1 | 1 | 2 | 6 |
1 | 2 | 2 | 5 |
2 | 1 | 2 | 1 |
2 | 2 | 2 | 4 |
Bemærk, at du skal angive de variabler, der er nødvendige for entydigt at identificere hver måling (ID og tid), og at variablen, der angiver målevariabelnavnene (1 eller 2), oprettes automatisk for dig.
nu hvor du har dine data i smeltet form, kan du omarbejde dem til enhver form ved hjælp af funktionen cast ().
Casting
funktionen cast() starter med smeltede data og omformer dem ved hjælp af en formel, du angiver, og en (valgfri) funktion, der bruges til at samle dataene. Formatet er
1 |
newdata <- cast(md, formula, FUN) |
hvor md er de smeltede data, beskriver formlen det ønskede slutresultat, og sjov er den (valgfri) aggregeringsfunktion. Formlen tager form
1 |
rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + … |
i denne formel definerer rækkevar1 + rækkevar2 + … det sæt krydsede variabler, der definerer rækkerne, og colvar1 + colvar2 + … definerer det sæt krydsede variabler, der definerer kolonnerne. Se eksemplerne i figur 1. (klik for at forstørre billedet)
Figur 1 omformning af data med funktionerne melt() og cast ()
da formlerne på højre side (d, e og f) ikke indeholder en funktion, omformes dataene. I modsætning hertil angiver eksemplerne på venstre side (A, b og c) gennemsnittet som en aggregeringsfunktion. Således omformes dataene ikke kun, men aggregeres også. For eksempel giver (a) midlerne på H1 og H2 i gennemsnit over tid for hver observation. Eksempel (b) angiver den gennemsnitlige score på 1 og 2 ved Tid 1 og tid 2, i gennemsnit over observationer. I (c) har du den gennemsnitlige score for hver observation på tid 1 og tid 2, i gennemsnit over 1 og 2.
som du kan se, er fleksibiliteten, der leveres af funktionerne melt() og cast (), fantastisk. Der er mange gange, hvor du bliver nødt til at omforme eller samle dine data inden analyse. For eksempel skal du typisk placere dine data i det, der kaldes langt format, der ligner tabel 2, Når du analyserer gentagne måledata (data, hvor der registreres flere mål for hver observation).
Resume
Kapitel 5 I R in Action gennemgår mange af de snesevis af matematiske, statistiske og sandsynlighedsfunktioner, der er nyttige til manipulation af data. I denne artikel har vi kort undersøgt flere måder at aggregere og omstrukturere data på.
denne artikel optrådte først som kapitel 5.6 fra bogen “R in action” og udgives med tilladelse fra Manning publishing house. Andre bøger i denne alvorlige, som du måske er interesseret i, er (se begyndelsen af dette indlæg for en rabatkode):
- maskinlæring i aktion af Peter Harrington
- Gnuplot i aktion (forståelse af Data med grafer) af Philipp K. Janert