Corso
Il data reshaping in R consiste nel disporre righe e colonne come preferisci per usarle in base alle tue esigenze; per lo più i dati vengono gestiti come data frame in R per eseguire l’elaborazione con funzioni come "rbind()", "cbind()", ecc.
In questo processo, rimodelli o riorganizzi i dati in righe e colonne. Il reshaping è la riorganizzazione dei dati in un modo specifico di cui hai bisogno per procedere con l’elaborazione.
Creare i tuoi dati
Creiamo un generatore di numeri casuali e prepariamo colonne da concatenare nel data frame. Inseriamo anche l’id per un uso successivo. "set.seed(123)" serve a produrre numeri casuali riproducibili, così lo stesso campione viene ottenuto su qualsiasi macchina. Vengono create tre variabili, colm1, colm2, colm3. Con l’aiuto di "sample()" si generano valori da 1 a 15, con possibile ripetizione. Inoltre, si usa un data frame per memorizzare i dati in tabella, e si aggiunge un id che è un numero univoco.
set.seed(123)
N <- 15
colm1 <- sample(1:15, N, replace=TRUE)
colm2 <- sample(1:15, N, replace=TRUE)
colm3 <- sample(1:15, N, replace=TRUE)
df_Temp <- data.frame(colm1, colm2,colm3)
df_Temp$id<-seq(nrow(df_Temp))
df_Temp
Il codice sopra fornisce il seguente output, con tre colonne chiamate "colm1", "colm2", "colm3" e un id da 1 a 15. I valori nelle rispettive colonne sono riempiti da 1 a 15, con alcuni numeri ripetuti e altri che possono non comparire.
colm1 colm2 colm3 id
15 11 14 1
15 5 3 2
3 3 4 3
14 11 14 4
3 9 1 5
10 12 11 6
2 9 7 7
6 9 5 8
11 13 12 9
5 3 15 10
4 8 10 11
14 10 13 12
6 7 7 13
9 10 9 14
10 9 9 15
Funzione cbind
Uso: usata per combinare vettori, matrici e data frame per colonne.
Parametri: cbind(v1,v2): v1, v2 possono essere vettori, matrici o data frame
Vediamo un esempio di binding in azione.
L’id può essere selezionato con "df_Temp[,4]" mentre "df_Temp[,2]" seleziona "colm2" di df_Temp come sotto: questi agiscono come parametri di "cbind()" e vengono salvati nella variabile "cbindexample". Successivamente, i nomi delle colonne possono essere cambiati con "colnames()", che accetta la variabile con l’input di vettori c e assegna nuovi valori, cioè "newid", "new_colm2".
cbindexample<-cbind(df_Temp[,4],df_Temp[,2])
colnames(cbindexample)<- c('newid','new_colm2')
cbindexample
Il codice sopra produce il seguente output, che mostra come unire due colonne, id e column2, usando la funzione "cbind" per creare un nuovo data frame. Inoltre, il nome della colonna è stato cambiato in "new_colm2" mentre "id" è diventato "newid".
newid new_colm2
1 11
2 5
3 3
4 11
5 9
6 12
7 9
8 9
9 13
10 3
11 8
12 10
13 7
14 10
15 9
Funzione rbind:
Uso: rbind si usa per combinare vettori, matrici o data frame per righe.
Parametri: rbind(v1,v2): v1, v2 possono essere vettori, matrici o data frame.
Creiamo un nuovo vettore chiamato "new_vector" e combinalo con il nuovo "cbindexample" a 2 colonne usando "rbind", dove entrambi vengono concatenati e salvati in "rbindexample".
new_vector<- c(16,15)
rbindexample<- rbind(cbindexample,new_vector)
rbindexample
Il codice sopra produce l’output seguente, dove viene aggiunta una nuova riga con i valori 16 e 15 rispettivamente in "newid" e "new_colm2".
newid new_colm2
1 11
2 5
3 3
4 11
5 9
6 12
7 9
8 9
9 13
10 3
11 8
12 10
13 7
14 10
15 9
16 15
Funzione Melt:
Uso: La funzione Melt converte un oggetto in uno stato "fuso", cioè prende più colonne di dati e le converte in un’unica colonna di dati.
Parametri: melt(data,…,na.rm=FALSE/TRUE, value.name=”value” ),
Data: Input che vuoi fondere.
...: Input passati da o verso altre funzioni.
Na.rm: Serve a convertire i valori mancanti espliciti in mancanti impliciti.
Value.name: per memorizzare i valori nelle variabili
Vediamo il codice con cui "fondi" i dati usando la variabile id in un’unica colonna con nome colonna e valore:
Importa la libreria chiamata "reshape2" con "library()" e usa melt per combinare le colonne di "dfTemp" chiamate colm1, colm2, colm3 in un unico posto chiamato "variable" in base alla variabile "id".
library(reshape2)
molted=melt(df_Temp,id.vars=c("id"))
molted
id variable value
1 colm1 15
2 colm1 15
3 colm1 3
4 colm1 14
5 colm1 3
6 colm1 10
7 colm1 2
8 colm1 6
9 colm1 11
10 colm1 5
11 colm1 4
12 colm1 14
13 colm1 6
14 colm1 9
15 colm1 10
1 colm2 11
2 colm2 5
3 colm2 3
4 colm2 11
5 colm2 9
6 colm2 12
7 colm2 9
8 colm2 9
9 colm2 13
10 colm2 3
11 colm2 8
12 colm2 10
13 colm2 7
14 colm2 10
15 colm2 9
1 colm3 14
2 colm3 3
3 colm3 4
4 colm3 14
5 colm3 1
6 colm3 11
7 colm3 7
8 colm3 5
9 colm3 12
10 colm3 15
11 colm3 10
12 colm3 13
13 colm3 7
14 colm3 9
15 colm3 9
L’output sopra mostra che quando fondi i dati di colm1, colm2, colm3 in base alla variabile id, questi vengono combinati in un’unica colonna chiamata "variable" e i valori delle colonne sono contenuti in "value".
Funzione Dcast:
Uso: quando hai un dataset fuso, puoi riconvertirlo nel formato originale usando questa funzione.
Parametri: dcast(data,id_variable~value),
Data: dati fusi che devono essere convertiti nella forma originale.
Id_variable: una o più colonne usate per fondere i dati di altre colonne in un’unica colonna.
~: dopo questo simbolo, usiamo i valori o la nuova colonna fusa del dataset fuso.
Qui sotto vedi il codice in cui si importa "reshape2" con "library()"; "dcast()" prende come primo parametro i dati su cui è stata eseguita la funzione "molt()" e il segno "~" con id, dove si formano le nuove colonne fuse.
library(reshape2)
dcast(molted,id~variable)
id colm1 colm2 colm3
1 15 11 14
2 15 5 3
3 3 3 4
4 14 11 14
5 3 9 1
6 10 12 11
7 2 9 7
8 6 9 5
9 11 13 12
10 5 3 15
11 4 8 10
12 14 10 13
13 6 7 7
14 9 10 9
15 10 9 9
Puoi vedere che i dati cambiati con la funzione "molt()" tornano al dataset originale. Ci sono tre colonne con i rispettivi valori e l’id in una colonna separata.
Funzione di trasposizione:
Uso: Serve a trasformare le righe in colonne e le colonne in righe.
Parametri: t(data), dove data è il data frame da passare per ottenere la trasposizione.
Convertiamo righe in colonne e viceversa usando la funzione di trasposizione. Si può fare semplicemente con "t(df_Temp)", come sotto.
trans <- t(df_Temp)
trans
Il codice sopra fornisce il seguente output:
colm1 15 15 3 14 3 10 2 6 11 5 4 14 6 9 10
colm2 11 5 3 11 9 12 9 9 13 3 8 10 7 10 9
colm3 14 3 4 14 1 11 7 5 12 15 10 13 7 9 9
id 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Si vede che il data frame con forma 15 righe e quattro colonne è stato convertito in 15 colonne e 3 righe tramite trasposizione.
Congratulazioni
Congratulazioni, sei arrivato alla fine di questo tutorial!
In questo tutorial, hai visto diverse funzioni di R come "rbind()", "cbind()", insieme a "Melt()", "Dcast()" e, infine, la funzione di trasposizione.
Se vuoi saperne di più su R, segui il corso Introduction to R di DataCamp e dai un’occhiata alla nostra guida R Packages: A Beginner's Tutorial.
Riferimenti:
Funzioni Melt

