Vai al contenuto principale

Dati long e wide in R

Scopri perché trasformare i dati da long a wide e viceversa e impara come farlo in R con melt() e dcast(!)
· 15 min leggi

Scopri con l'IA

Capita spesso di dover convertire i dati dal formato long (chiamato anche "long-form", il cui significato sarà chiaro tra poco) al formato wide e viceversa. I dati del mondo reale arrivano nei formati più disparati, ma molte funzioni di R sono pensate per un formato specifico.

Per esempio, lme4::lmer() per i modelli lineari misti e ggplot2::ggplot() per la visualizzazione sono progettate per il long-form. Altre funzioni, come mosaicplot(), sono invece pensate per il wide-form. Questo significa che devi convertire il formato per fare analisi o visualizzazioni, a meno che i dati non siano già nel formato giusto.

In R esistono diverse opzioni per la conversione di formato, ma quando si inizia possono risultare abbastanza confuse.

In questo tutorial vedrai come capire la meccanica della conversione dei dati tra long-form e wide-form. Esplorerai i seguenti argomenti:

  • Approfondirai cos’è il formato long.
  • Poi conoscerai il formato wide.
  • Ripasserai le differenze tra i due formati;
  • Vedrai quali passaggi servono per passare da un formato all’altro.
  • Infine, metterai tutto in pratica con R. Imparerai a passare da un formato long a un formato wide con le funzioni melt() e dcast().

I dati

Tabella 01
namegenderyear2011year2012year2013year2014year2015
Jackson SmithM74.6984.9991.73105.11111.04
Sophia JohnsonFNANANANA75.89
Emma WilliamsFNANA75.7486.5091.50
Aiden JonesMNANANA71.8981.42
Liam BrownM88.2496.91101.85108.13112.45
Lucas DavisM70.6083.7894.17100.03106.35
Olivia MillerF64.7880.7687.3097.13103.80
Ava WilsonF88.7796.45104.72112.84NA

Questa tabella mostra l’altezza di alcuni bebè in una piccola area locale. Le altezze sono state misurate dal 2011 al 2015. Come forse sai già, NA significa ‘Not Available’. Dalla posizione degli NA puoi dedurre l’età dei bebè, ma l’età esatta non è disponibile dalla tabella. La tabella sembra ben organizzata, ma per chi vuole studiare la crescita dei bebè c’è un problema: l’informazione importante non è il momento assoluto in cui un bebè è stato misurato, bensì l’età che aveva al momento della misurazione. Riusciresti a inserire questa informazione nella tabella? Qui sotto vedi un modo:

Tabella 02
namegenderage0age1age2age3age4age5age6
Jackson SmithMNA76.6984.9197.06105.73107.32NA
Sophia JohnsonFNA76.05NANANANANA
Emma WilliamsF72.6582.4691.76NANANANA
Aiden JonesM69.7679.89NANANANANA
Liam BrownMNANA85.3493.22105.78105.84114.82
Lucas DavisM71.5984.8792.10100.73104.21NANA
Olivia MillerF62.7481.3992.0298.32106.44NANA
Ava WilsonFNANA88.39100.67107.58111.52NA

Il numero di NA è aumentato. ## Dati in formato wide Ma cosa faresti se volessi indicare l’età in mesi di un bebè? Potrebbe essere qualcosa del genere:

Tabella 03
namegenderm4m6m7m10m12...m55m60m65m72
Jackson SmithMNANANANA76.69...NA107.32NANA
Sophia JohnsonFNANANANA76.05...NANANANA
Emma WilliamsFNANANA72.65NA...NANANANA
Aiden JonesMNA69.76NANANA...NANANANA
Liam BrownMNANANANANA...NA105.84NA114.82
Lucas DavisMNANA71.59NANA...104.21NANANA
Olivia MillerF62.74NANANANA...NANANANA
Ava WilsonFNANANANANA...NANA111.52NA

Ci sono un sacco di NA nella tabella qui sopra. Se i bebè differiscono nei tempi relativi delle misurazioni, il formato wide può sprecare molto spazio. Un’altra opzione è includere l’età dei bebè riferita al 2015, ma ciò è possibile solo quando i tempi assoluti di misurazione sono uguali per tutti. Se i bebè differiscono di mesi nel momento della misurazione e vuoi conoscere l’età in mesi, non funziona. Allora questo esempio sembra l’unico modo. In questo caso, puoi considerare il formato long. ## Dati in formato long Mentre nel formato wide tutte le misure di un bebè sono in un’unica riga, nel formato long vedi una sola misurazione per riga. Il modo più semplice per ottenere quest’ultimo è mostrare il nome del bambino, il momento della misurazione e la misurazione (altezza) su una riga. È esattamente ciò che mostra questa tabella:

Tabella 04
namegendermonthheight
Olivia MillerF462.74
Aiden JonesM669.76
Lucas DavisM771.59
Emma WilliamsF1072.65
Jackson SmithM1276.69
............
Liam BrownM72114.82

Se ordini i dati per nome, otterrai qualcosa di simile alla tabella qui sotto. È evidente che questa tabella occupa meno spazio della Tabella 3, che vedi sopra!

Tabella 05
namegendermonthheight
Jackson SmithM1276.69
Jackson SmithM2484.91
Jackson SmithM3697.06
Jackson SmithM48105.73
Jackson SmithM60107.32
Sophia JohnsonF1276.05
Emma WilliamsF1072.65
............
Ava WilsonF65111.52

Long contro Wide

Nota ancora una volta le differenze fondamentali tra wide-form e long-form: una differenza semplice è che il wide-form mostra molte misure dello stesso individuo su una riga e i nomi delle colonne indicano quali misure sono.

Questa tabella mostra le altezze di Liam Brown negli anni 2011-2015 in un’unica riga:

Tabella 06
namegenderyear2011year2012year2013year2014year2015
Liam BrownM88.2496.91101.85108.13112.45

Nel long-form le altezze di Liam Brown sono mostrate in un’unica colonna:

Tabella 07
namegender_
Liam BrownM85.34
Liam BrownM93.22
Liam BrownM105.78
Liam BrownM105.84
Liam BrownM114.82

Come vedi, non puoi sapere a cosa si riferiscono le misure. Se scrivi il nome della colonna, apparirebbe così:

Tabella 08
namegenderyear2011, 2012, 2013, 2014, 2015
Liam BrownM85.34
Liam BrownM93.22
Liam BrownM105.78
Liam BrownM105.84
Liam BrownM114.82

Ma anche questo ha un suo problema. L’altezza di Sophia Johnson non è stata misurata negli anni 2011-2014. Quindi, come vedi sotto, il nome della colonna non può essere definito facilmente:

Tabella 09
namegender?
Liam BrownM85.34
Liam BrownM93.22
Liam BrownM105.78
Liam BrownM105.84
Liam BrownM114.82
Sophia JohnsonF76.05

Dal formato wide al formato long

Convertire il wide-form in long-form si può vedere come un processo a step. Prima di convertire le misure di una riga in un’unica colonna, puoi riorganizzare la tabella in modo che contenga una sola misura per riga. Facciamolo per questa tabella:

Tabella 10
namegenderage0age1age2age3age4age5age6
Emma WilliamsF72.6582.4691.76NANANANA
Aiden JonesM69.7679.89NANANANANA

Il risultato è come la tabella seguente:

Tabella 11
namegenderage0age1age2age3age4age5age6
Emma WilliamsF72.65  NANANANA
Emma WilliamsF 82.46    NA
Emma WilliamsF  91.76    
Aiden JonesM69.76 NANANANANA
Aiden JonesM 79.89     

Prima di raccogliere quelle misurazioni sparse tra le colonne in un’unica colonna, devi creare una colonna aggiuntiva che indichi cosa sono le misure, proprio come sotto:

Tabella 12
namegendermeasureage0age1age2age3age4age5age6
Emma WilliamsFage072.65  NANANANA
Emma WilliamsFage1 82.46    NA
Emma WilliamsFage2  91.76    
Aiden JonesMage069.76 NANANANANA
Aiden JonesMage1 79.89     

Il nome della colonna è solitamente “measure” o “key”. Noterai nella tabella sopra che ci sono “age0”, “age1”, “age2”, “age3”, “age4”, “age5” sia tra i nomi delle colonne sia in una colonna. Se ometti i nomi delle colonne, la tabella sarà come sotto.

Tabella 13
namegendermeasure____________________________
Emma WilliamsFage072.65  NANANANA
Emma WilliamsFage1 82.46     
Emma WilliamsFage2  91.76    
Aiden JonesMage069.76 NANANANANA
Aiden JonesMage1 79.89     

Dal momento che c’è una sola misura per riga, puoi raccoglierle in un’unica colonna e il risultato sarà il seguente:

Tabella 14
namegendermeasure 
Emma WilliamsFage072.65
Emma WilliamsFage182.46
Emma WilliamsFage291.76
Aiden JonesMage069.76
Aiden JonesMage179.89

Diamo un nome di colonna nuovo a tutte le misure. Di solito si chiama "value":

Tabella 15
namegendermeasurevalue
Emma WilliamsFage072.65
Emma WilliamsFage182.46
Emma WilliamsFage291.76
Aiden JonesMage069.76
Aiden JonesMage179.89

Guarda la tabella sopra. Noti che "age" si ripete? Puoi omettere l’entità ripetuta, ottenendo questo risultato:

Tabella 16
namegenderagevalue
Emma WilliamsF072.65
Emma WilliamsF182.46
Emma WilliamsF291.76
Aiden JonesM069.76
Aiden JonesM179.89

Age, che si ripete in ogni riga, ora è un nome di colonna. Il nome di colonna value nella tabella sopra può essere più specifico. Lo sostituisci con height, che è più esplicito. Il risultato è nella tabella seguente:

Tabella 17
namegenderageheight
Emma WilliamsF072.65
Emma WilliamsF182.46
Emma WilliamsF291.76
Aiden JonesM069.76
Aiden JonesM179.89

Confrontiamo la Tabella 15 con la Tabella 17. value, uno dei nomi di colonna della Tabella 15, può significare qualsiasi cosa, mentre height nella Tabella 17 ha un significato molto specifico: può indicare solo l’altezza, mentre il value nella Tabella 15 potrebbe essere qualunque valore, come altezza, peso, velocità o colore. Un altro modo sarebbe questo:

Tabella 18
namegendermeasurevalue
Emma WilliamsFheight.age072.65
Emma WilliamsFheight.age182.46
Emma WilliamsFheight.age291.76
Aiden JonesMheight.age069.76
Aiden JonesMheight.age179.89

Consideriamo ora il caso in cui le misure siano diverse. Se le misure sono altezza, peso e BMI, sarà come la tabella sotto. Ma in questo caso la colonna value contiene valori numerici su scale diverse, quindi leggerli può confondere. In questa tabella l’altezza è in centimetri e il peso in chilogrammi:

Tabella 19
namegendermeasurevalue
Emma WilliamsFheight72.65
Emma WilliamsFweight8.22
Emma WilliamsFBMI22.60
Aiden JonesMheight69.76
Aiden JonesMweight8.51

Quindi, quando converti dal wide-form al long-form, devi decidere quali valori raccogliere in un’unica colonna. Dopo di che, puoi decidere il nome della colonna.

Riepiloghiamo quanto detto finora: per convertire dal wide-form al long-form devi decidere quali colonne modificare affinché finiscano in un’unica colonna. Facendo ciò, molte colonne vengono combinate in una sola. Serve quindi un nome per quella colonna, come vedi nelle prossime tabelle:

Tabella 20
id1id2age0age1age2
Emma WilliamsFNA82.4691.76
Aiden JonesM69.7679.89NA
Emma WilliamsFNA82.4691.76
Tabella 21
id1id2age0age1age2
Emma WilliamsFNA  
Emma WilliamsF 82.46 
Emma WilliamsF  91.76
Aiden JonesM69.76  
Aiden JonesM 79.89 
Aiden JonesM  NA
Emma WilliamsFNA  
Emma WilliamsF 82.46 
Emma WilliamsF  91.76
Tabella 22
id1id2age_age0age1age2
Emma WilliamsFage0NA  
Emma WilliamsFage1 82.46 
Emma WilliamsFage2  91.76
Aiden JonesMage069.76  
Aiden JonesMage1 79.89 
Aiden JonesMage2  NA
Emma WilliamsFage0NA  
Emma WilliamsFage1 82.46 
Emma WilliamsFage2  91.76
Tabella 23
id1id2age_ 
Emma WilliamsFage0NA
Emma WilliamsFage182.46
Emma WilliamsFage291.76
Aiden JonesMage069.76
Aiden JonesMage179.89
Aiden JonesMage2NA
Emma WilliamsFage0NA
Emma WilliamsFage182.46
Emma WilliamsFage291.76
Tabella 24
id1id2keyvalue
Emma WilliamsFage0NA
Emma WilliamsFage182.46
Emma WilliamsFage291.76
Aiden JonesMage069.76
Aiden JonesMage179.89
Aiden JonesMage2NA
Emma WilliamsFage0NA
Emma WilliamsFage182.46
Emma WilliamsFage291.76
Tabella 25
id1id2keyvalue
Emma WilliamsFage182.46
Emma WilliamsFage291.76
Aiden JonesMage069.76
Aiden JonesMage179.89
Emma WilliamsFage182.46
Emma WilliamsFage291.76

Osserva le colonne id1 e id2 nella tabella sopra. id2 non identifica un individuo ma è un attributo (genere) dell’individuo. In altre parole, puoi considerarlo una misura. Quindi puoi convertirla in un formato ancora più long. Il formato più long è composto da tre colonne: id, key e value.

Tabella 26
idkeyvalue
Emma WilliamsgenderF
Emma Williamsage182.46
Emma Williamsage291.76
Aiden JonesgenderF
Aiden Jonesage069.76
Aiden Jonesage179.89
Emma WilliamsgenderF
Emma Williamsage182.46
Emma Williamsage291.76

La tabella sopra mostra il formato più long a partire dalla tabella 25. Ma persone diverse possono avere lo stesso nome.

In tal caso, il long-form può creare ambiguità perché id non identifica univocamente una persona. Puoi aggiungere un numero dopo il nome per distinguere le persone (per esempio, usando la funzione R make.unique()), ma non puoi distinguere un nome modificato dall’originale se conteneva già un numero. Pensa a una persona che si chiama davvero "John.2"!

La soluzione più ovvia è assegnare un ID numerico diverso a ogni persona. In tal caso, i nomi diventano un’altra misura.

La prossima tabella mostra che anche i nomi sono considerati misure. In un certo senso, questo è il vero formato più long.

Tabella 27
idkeyvalue
1nameEmma Williams
1genderF
1age182.46
1age291.76
2nameAiden Jones
2genderF
2age069.76
2age179.89
3nameEmma Williams
3genderF
3age182.46
3age291.76

Il formato più long è il più facile da trasformare in formato wide. Se inverti il processo di conversione dal wide al long mostrato nelle tabelle 20–25, torni al formato wide. Le tabelle qui sotto mostrano questo processo:

Tabella 28. Le misure nella colonna key si ripetono come nomi di colonna
idkeynamegenderage0age1age2
1nameEmma Williams    
1gender F   
1age1   82.46 
1age2    91.76
2nameAiden Jones    
2gender F   
2age0  69.76  
2age1   79.89 
3nameEmma Williams    
3gender F   
3age1   82.46 
3age2    91.76
Tabella 29. La colonna key può essere eliminata
idnamegenderage0age1age2
1Emma Williams    
1 F   
1   82.46 
1    91.76
2Aiden Jones    
2 F   
2  69.76  
2   79.89 
3Emma Williams    
3 F   
3   82.46 
3    91.76
Tabella 30. Lo stesso id può essere raccolto in un’unica riga
idnamegenderage0age1age2
1Emma WilliamsF 82.4691.76
1     
1     
1     
2Aiden JonesF69.7679.89 
2     
2     
2     
3Emma WilliamsF 82.4691.76
3     
3     
3     
Tabella 31. Elimina le righe che non hanno misure
idnamegenderage0age1age2
1Emma WilliamsF 82.4691.76
2Aiden JonesF69.7679.89 
3Emma WilliamsF 82.4691.76

Il fattore chiave nella conversione dal formato wide al formato long è decidere quali colonne raccogliere in un’unica colonna.

Ma non deve per forza essere una sola colonna. Puoi usarne due, se necessario, come nella tabella seguente:

Tabella 32
namegenderh2011h2012w2011w2012
Jackson SmithM74.6984.999.6012.0
Olivia MillerFNA80.767.1510.7
Ava WilsonF88.7796.45NA15.0

Riesci a trasformarla in formato long?

Le colonne h2011, h2012, w2011, w2012 indicano altezze e pesi negli anni 2011 e 2012. height e weight sono misurate su scale diverse – cm, kg. Puoi quindi usare una sola colonna per entrambe oppure due colonne, come in questa tabella:

Tabella 33
namegenderyearheightweight
Jackson SmithM201174.699.60
Jackson SmithM201284.9912.00
Olivia MillerF2011NA80.76
Olivia MillerF20127.1510.70
Ava WilsonF201188.7796.45
Ava WilsonF2012NA15.00

Questo è long-form o wide-form?

Da long a wide in R

Facciamo la conversione tra long-form e wide-form con R. Ci sono molte funzioni e pacchetti per questo compito.

Tabella 34
funcpackageto_long_formto_wide_form
stack/unstackutilsstackunstack
reshapestatsreshape(direction="long", ...)reshape(direction="wide", ...)
melt/dcastreshape2meltdcast
gather/spreadtidyrgatherspread

Qui spiegherò come usare le funzioni melt() e dcast() del pacchetto reshape2. Il motivo è che stack() e unstack() sono funzioni di base, quindi il loro risultato richiede post-processing. Nota che gather() e spread() sono funzioni di tidyr anch’esse molto popolari, ma non verranno trattate in questo tutorial.

Un’altra funzione che potresti usare è reshape(), che fa parte del pacchetto stats. In realtà non confonderti con questa funzione: esiste anche un pacchetto chiamato reshape! Questo pacchetto, insieme a reshape2, è stato sviluppato per chi aveva difficoltà con reshape(). Inoltre, la funzione reshape() sembra presupporre che i dati siano longitudinali, cioè che le misurazioni si ripetano nel tempo.

Convertiamo i dati della tabella 35 nel formato long. Supponi che la tabella seguente sia memorizzata in un data.frame chiamato dat.

Tabella 35
namegenderyear2011year2012year2013
Jackson SmithM74.6984.9991.73
Emma WilliamsFNANA75.74
Liam BrownM88.24NA101.85
Ava WilsonF88.7796.45NA

babies = data.frame(name= c("Jackson Smith", "Emma Williams", "Liam Brown", "Ava Wilson"), gender = c("M", "F", "M", "F"), year2011= c(74.69, NA, 88.24, 88.77), year2012=c(84.99, NA, NA, 96.45), year2013=c(91.73, 75.74, 101.83, NA)) babies

##            name gender year2011 year2012 year2013
## 1 Jackson Smith      M    74.69    84.99    91.73
## 2 Emma Williams      F       NA       NA    75.74
## 3    Liam Brown      M    88.24       NA   101.83
## 4    Ava Wilson      F    88.77    96.45       NA

La domanda che vuoi porti è: "quali colonne combinare in un’unica colonna?".

Saranno year2011, year2012, year2013. Quando usi la funzione melt(), queste colonne vanno elencate in measure.vars:

melt(babies, measure.vars = c("year2011", "year2012", "year2013"))

##             name gender variable  value
## 1  Jackson Smith      M year2011  74.69
## 2  Emma Williams      F year2011     NA
## 3     Liam Brown      M year2011  88.24
## 4     Ava Wilson      F year2011  88.77
## 5  Jackson Smith      M year2012  84.99
## 6  Emma Williams      F year2012     NA
## 7     Liam Brown      M year2012     NA
## 8     Ava Wilson      F year2012  96.45
## 9  Jackson Smith      M year2013  91.73
## 10 Emma Williams      F year2013  75.74
## 11    Liam Brown      M year2013 101.83
## 12    Ava Wilson      F year2013     NA

year2011, year2012, year2013 sono le colonne in 3ª, 4ª, 5ª posizione, quindi puoi usare questa specifica:

melt(babies, measure.vars = 3:5)

##             name gender variable  value
## 1  Jackson Smith      M year2011  74.69
## 2  Emma Williams      F year2011     NA
## 3     Liam Brown      M year2011  88.24
## 4     Ava Wilson      F year2011  88.77
## 5  Jackson Smith      M year2012  84.99
## 6  Emma Williams      F year2012     NA
## 7     Liam Brown      M year2012     NA
## 8     Ava Wilson      F year2012  96.45
## 9  Jackson Smith      M year2013  91.73
## 10 Emma Williams      F year2013  75.74
## 11    Liam Brown      M year2013 101.83
## 12    Ava Wilson      F year2013     NA

Il risultato è nella tabella sopra. Nota i nomi di colonna variable e value. Le Tabelle 23 e 24 mostravano che servono nuovi nomi di colonna. La funzione melt() usa nomi predefiniti per le nuove colonne — variable e value. Puoi sovrascriverli con gli argomenti variable.name= e value.name=. Vediamolo qui sotto:

melt(babies, measure.vars=3:5, variable.name="year", value.name="height")

##             name gender     year height
## 1  Jackson Smith      M year2011  74.69
## 2  Emma Williams      F year2011     NA
## 3     Liam Brown      M year2011  88.24
## 4     Ava Wilson      F year2011  88.77
## 5  Jackson Smith      M year2012  84.99
## 6  Emma Williams      F year2012     NA
## 7     Liam Brown      M year2012     NA
## 8     Ava Wilson      F year2012  96.45
## 9  Jackson Smith      M year2013  91.73
## 10 Emma Williams      F year2013  75.74
## 11    Liam Brown      M year2013 101.83
## 12    Ava Wilson      F year2013     NA

Nell’esempio sopra le misure sono state specificate esplicitamente. In certi contesti Id può specificare indirettamente le misure. Puoi quindi scegliere le colonne di id invece delle misure.

I risultati sono uguali nei due casi sotto. Il primo sceglie le colonne di id, il secondo le colonne da raccogliere:

melt(babies, id.vars=c("name","gender"))

melt(babies, measure.vars = c("year2011", "year2012", "year2013"))

##             name gender variable  value
## 1  Jackson Smith      M year2011  74.69
## 2  Emma Williams      F year2011     NA
## 3     Liam Brown      M year2011  88.24
## 4     Ava Wilson      F year2011  88.77
## 5  Jackson Smith      M year2012  84.99
## 6  Emma Williams      F year2012     NA
## 7     Liam Brown      M year2012     NA
## 8     Ava Wilson      F year2012  96.45
## 9  Jackson Smith      M year2013  91.73
## 10 Emma Williams      F year2013  75.74
## 11    Liam Brown      M year2013 101.83
## 12    Ava Wilson      F year2013     NA

Se specifichi sia id.vars sia measure.vars, le colonne non incluse in nessuna delle due vengono escluse dal risultato. Per esempio, guarda il blocco di codice qui sotto:

melt(babies, id.vars=c("name"), measure.vars=c("year2011", "year2012"))

##            name variable value
## 1 Jackson Smith year2011 74.69
## 2 Emma Williams year2011    NA
## 3    Liam Brown year2011 88.24
## 4    Ava Wilson year2011 88.77
## 5 Jackson Smith year2012 84.99
## 6 Emma Williams year2012    NA
## 7    Liam Brown year2012    NA
## 8    Ava Wilson year2012 96.45

Inoltre, na.rm=T può eliminare gli NA:

melt(babies, id.vars=c("name"), measure.vars=c("year2011", "year2012"), na.rm=T)

##            name variable value
## 1 Jackson Smith year2011 74.69
## 3    Liam Brown year2011 88.24
## 4    Ava Wilson year2011 88.77
## 5 Jackson Smith year2012 84.99
## 8    Ava Wilson year2012 96.45

La funzione dcast() fa l’inverso di melt(). id, variable e value sono le colonne del formato più long. dcast(data, id ~ variable, value.var="value") porta il formato più long nel formato wide.

babiesLong <- melt(babies, id.vars=c("name"), measure.vars=c("year2011", "year2012"), na.rm=T)
babiesLong

##            name variable value
## 1 Jackson Smith year2011 74.69
## 3    Liam Brown year2011 88.24
## 4    Ava Wilson year2011 88.77
## 5 Jackson Smith year2012 84.99
## 8    Ava Wilson year2012 96.45

babiesLong ha name per id, variable per variable e value per value. Quindi puoi usare dcast() per trasformarlo in formato long:

dcast(babiesLong, name ~ variable, value.var="value")

##            name year2011 year2012
## 1    Ava Wilson    88.77    96.45
## 2 Jackson Smith    74.69    84.99
## 3    Liam Brown    88.24       NA

Conclusione

Direi che ci siamo. In questo tutorial ti sei concentrato sulla logica e sul processo di rimodellamento dei dati. Di solito il long-form è preferito per l’analisi, ma ci sono eccezioni. La presentazione dei dati in wide-form può far risparmiare spazio quando è appropriato, ma man mano che aumentano i valori mancanti, conviene passare al long-form.

Per la conversione di formato, devi concentrarti su cosa sono le misure. Il motto del long-form è una misura per riga, mentre il wide-form ha molte misure su una riga. Quando raccogli misure distribuite su più colonne in un’unica colonna, i nomi originali delle colonne devono essere preservati in una colonna aggiuntiva. Quando distribuisci misure da un’unica colonna su più colonne, devi ricavare i nomi delle colonne dalla colonna variable.

Una volta compreso il processo, usare funzioni come dcast() e melt() diventa molto più semplice!

Argomenti

Correlato