Il seguente post introduttivo è destinato ai nuovi utenti di R. Si occupa della ristrutturazione dei dati: cos’è e come eseguirlo utilizzando le funzioni di base R e il pacchetto {reshape}.
Questo è un articolo ospite dal Dr. Robert I. Kabacoff, il fondatore di (uno dei) i primi siti web R tutorial online: Quick-R. Kabacoff ha recentemente pubblicato il libro “R in Action”, fornendo un dettagliato walk-through per il linguaggio R basato su vari esempi per illustrare le caratteristiche di R (manipolazione dei dati, metodi statistici, grafica, e così via…). Il precedente guest post di Kabacoff ha introdotto i dati.frame objects in R.
Per i lettori di questo blog, c’è uno sconto del 38% sul libro “R in Action” (così come tutti gli altri eBook, pBooks e MEAPs alla casa editrice Manning), semplicemente usando il codice rblogg38 quando si raggiunge il checkout.
Parliamo ora dell’Aggregazione e della ristrutturazione dei dati in R:
Aggregazione e ristrutturazione
R fornisce una serie di potenti metodi per aggregare e rimodellare i dati. Quando si aggregano i dati, si sostituiscono i gruppi di osservazioni con statistiche di riepilogo basate su tali osservazioni. Quando si rimodellano i dati, si modifica la struttura (righe e colonne) che determina l’organizzazione dei dati. Questo articolo descrive una varietà di metodi per svolgere queste attività.
Useremo il frame di dati mtcars incluso nell’installazione di base di R. Questo set di dati, estratto da Motor Trend magazine (1974), descrive le caratteristiche di progettazione e prestazioni (numero di cilindri, cilindrata, potenza, mpg e così via) per 34 automobili. Per ulteriori informazioni sul set di dati, vedere aiuto (mtcars).
Transpose
La transpose (inversione di righe e colonne) è forse il metodo più semplice per rimodellare un set di dati. Utilizzare la funzione t () per trasporre una matrice o un frame di dati. In quest’ultimo caso, i nomi delle righe diventano nomi di variabili (colonna). Un esempio è presentato nel prossimo elenco.
Listato 1 Trasposizione di un dataset
Listato 1 utilizza un sottoinsieme del dataset mtcars per risparmiare spazio sulla pagina. Vedrai un modo più flessibile di trasporre i dati quando esamineremo il pacchetto reshape più avanti in questo articolo.
Aggregare i dati
È relativamente facile comprimere i dati in R utilizzando una o più variabili e una funzione definita. Il formato è
1 |
aggregate(x, by, FUN) |
dove x è l’oggetto dati per essere compresso, è riportato un elenco di variabili che possono essere incrociate a formare le nuove osservazioni, e il DIVERTIMENTO è la funzione scalare utilizzato per calcolare le statistiche di riepilogo che andranno a comporre la nuova osservazione valori.
Ad esempio, aggregheremo i dati mtcars per numero di cilindri e ingranaggi, restituendo i mezzi su ciascuna delle variabili numeriche (vedere il prossimo elenco).
Listato 2 Aggregare i dati
In questi risultati, Gruppo.1 rappresenta il numero di cilindri (4, 6 o e Gruppo.2 rappresenta il numero di marce (3, 4 o 5). Ad esempio, le auto con 4 cilindri e 3 marce hanno una media di 21,5 miglia per gallone (mpg).
Quando si utilizza la funzione aggregate (), le variabili by devono essere in un elenco (anche se ce n’è solo una). È possibile dichiarare un nome personalizzato per i gruppi dall’interno dell’elenco, ad esempio, utilizzando by=list(Group.cil=cil, Gruppo.ingranaggi = ingranaggio).
La funzione specificata può essere qualsiasi funzione integrata o fornita dall’utente. Questo dà al comando aggregato una grande quantità di potere. Ma quando si tratta di potere, niente batte il pacchetto reshape.
Il pacchetto reshape
Il pacchetto reshape è un approccio estremamente versatile sia per la ristrutturazione che per l’aggregazione di set di dati. A causa di questa versatilità, può essere un po ‘ difficile da imparare.
Andremo attraverso il processo lentamente e utilizzare un piccolo set di dati in modo che sia chiaro cosa sta succedendo. Poiché reshape non è incluso nell’installazione standard di R, è necessario installarlo una volta, utilizzando install.pacchetti(“rimodellare”).
Fondamentalmente, “fonderai” i dati in modo che ogni riga sia una combinazione ID-variabile univoca. Quindi “lancerai” i dati fusi in qualsiasi forma desideri. Durante il cast, è possibile aggregare i dati con qualsiasi funzione che si desidera. Il set di dati con cui lavorerai è mostrato nella tabella 1.
Tabella 1 set di dati originale (mydata)
ID |
Tempo |
X1 |
X2 |
1 | 1 | 5 | 6 |
1 | 2 | 3 | 5 |
2 | 1 | 6 | 1 |
2 | 2 | 2 | 4 |
In questo set di dati, le misure sono i valori delle ultime due colonne (5, 6, 3, 5, 6, 1, 2, e 4). Ogni misurazione è identificata in modo univoco da una combinazione di variabili ID (in questo caso ID, Tempo e se la misurazione è su X1 o X2). Ad esempio, il valore misurato 5 nella prima riga viene identificato in modo univoco sapendo che proviene dall’osservazione (ID) 1, al Tempo 1 e dalla variabile X1.
Fusione
Quando si fonde un set di dati, lo si ristruttura in un formato in cui ogni variabile misurata si trova nella propria riga, insieme alle variabili ID necessarie per identificarla in modo univoco. Se si fondono i dati dalla tabella 1, utilizzando il seguente codice
12 |
library(reshape)md <- melt(mydata, id=(c("id", "time"))) |
Si finisce con la struttura mostrata nella tabella 2.
Tabella 2 fuso set di dati
ID |
Tempo |
Variabile |
Valore |
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 |
si noti che è necessario specificare le variabili necessarie per identificare in modo univoco ogni misura (ID e Ora) e che la variabile che indica la misura di nomi di variabili (X1 o X2) viene creato automaticamente.
Ora che hai i tuoi dati in una forma fusa, puoi rifondarli in qualsiasi forma, usando la funzione cast ().
Fusione
La funzione cast() inizia con i dati fusi e li rimodella utilizzando una formula fornita e una funzione (opzionale) utilizzata per aggregare i dati. Il formato è
1 |
newdata <- cast(md, formula, FUN) |
Dove md è i dati fusi, la formula descrive il risultato finale desiderato e FUN è la funzione di aggregazione (opzionale). La formula assume la forma
1 |
rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + … |
In questa formula, rowvar1 + rowvar2 + … definire il set di attraversato le variabili che definiscono le righe, e colvar1 + colvar2 + … definire il set di attraversato le variabili che definiscono le colonne. Vedere gli esempi in figura 1. (clicca per ingrandire l’immagine)
Figura 1 Rimodellamento dei dati con le funzioni melt() e cast ()
Poiché le formule sul lato destro (d, e ed f) non includono una funzione, i dati vengono rimodellati. Al contrario, gli esempi sul lato sinistro (a, b e c) specificano la media come funzione aggregante. Pertanto i dati non vengono solo rimodellati ma anche aggregati. Ad esempio, (a) fornisce i mezzi su X1 e X2 mediati nel tempo per ogni osservazione. L’esempio (b) fornisce i punteggi medi di X1 e X2 al Tempo 1 e al Tempo 2, in media rispetto alle osservazioni. In (c) hai il punteggio medio per ogni osservazione al Tempo 1 e al Tempo 2, in media su X1 e X2.
Come puoi vedere, la flessibilità fornita dalle funzioni melt() e cast() è sorprendente. Ci sono molte volte in cui dovrai rimodellare o aggregare i tuoi dati prima dell’analisi. Ad esempio, in genere è necessario posizionare i dati in quello che viene chiamato formato lungo simile alla tabella 2 quando si analizzano i dati delle misure ripetute (dati in cui vengono registrate più misure per ogni osservazione).
Sommario
Il capitolo 5 di R in Action esamina molte delle decine di funzioni matematiche, statistiche e di probabilità utili per manipolare i dati. In questo articolo, abbiamo brevemente esplorato diversi modi di aggregare e ristrutturare i dati.
Questo articolo è apparso per la prima volta come capitolo 5.6 dal libro “R in action” ed è pubblicato con il permesso della casa editrice Manning. Altri libri in questo serio che potresti essere interessato sono (vedi l’inizio di questo post per un codice sconto):
- Apprendimento automatico in azione di Peter Harrington
- Gnuplot in azione (Comprensione dei dati con grafici) di Philipp K. Janert