Vai al contenuto principale

Unire i dataset in R

In questo tutorial imparerai a unire più dataset in R.
· 8 min leggi

Scopri con l'IA

Nella pratica, i dati sono ospitati su server diversi e in molti file differenti. Quando i dati di cui hai bisogno provengono da più fonti, è fondamentale sapere come aggregarli in modo da perdere il meno possibile e creare abbinamenti che abbiano davvero senso rispetto alla struttura dei tuoi dati.

Questo tutorial ti guiderà attraverso:

  • Unire i dataset orizzontalmente e verticalmente
  • Cosa sono le chiavi primarie e come danno struttura ai tuoi dati
  • Diversi tipi di join (ad es., left-join, inner-join, full-join) e come scegliere tra loro
  • Un problema comune a cui prestare attenzione e come risolverlo

Concatenare i dataset

A livello generale, ci sono due modi per unire i dataset: puoi aggiungere informazioni aggiungendo più righe oppure aggiungendo più colonne al tuo dataset. In generale, quando hai dataset che hanno lo stesso insieme di colonne o lo stesso insieme di osservazioni, puoi concatenarli rispettivamente in verticale o in orizzontale. Impariamo con alcuni esempi.

Aggiungere i dataset verticalmente

Quando hai più dataset con lo stesso insieme di colonne, puoi concatenare un dataset a un altro in verticale. Cioè, mantenendo le colonne del tuo dataset, puoi aggiungere più righe. Avere tali informazioni in un unico file ti renderà più semplice aggregare e avere una visione d’insieme, senza il fastidio di passare continuamente da un file all’altro e perderne il filo.

Dataset 1

MakeNum models
Honda63
BMW10

Dataset 2

MakeNum models
Ford26
Tesla4

È importante notare che, se hai la stessa osservazione presente in più dataset e li concateni verticalmente usando rbind(), finirai con osservazioni duplicate nella tua tabella. E anche se i due dataset devono avere lo stesso insieme di variabili (ovvero colonne), non è necessario che siano nello stesso ordine. Verificalo tu stesso nella console qui sotto!

Nell’area di lavoro ci sono due dataset chiamati dataset1 e dataset2 che hai visto sopra. Prova a riordinare le colonne di dataset1. Chiama rbind() su dataset1 e dataset2 così come su reordered_dataset1 e dataset2.


            # Add datasets vertically
            rbind(dataset1, dataset2)

            # Reorder columns
            reordered_dataset1 <- dataset1[, c(2, 1)]

            # See that rbind() is robust to column ordering
            rbind(reordered_dataset1, dataset2)
            

Dopo rbind(), i risultati dovrebbero contenere le informazioni su tutte e quattro le case automobilistiche in un’unica tabella come questa:

Dataset concatenato verticalmente

MakeNum models
Honda63
BMW10
Ford26
Tesla4

Aggiungere i dataset orizzontalmente

Quando hai dataset che rappresentano lo stesso insieme di osservazioni, puoi concatenarli orizzontalmente. Questa volta, mantenendo le righe del tuo dataset, puoi aggiungere più colonne. In questi casi, dovresti verificare che l’ordine delle osservazioni sia lo stesso. Se i tuoi dataset hanno un numero diverso di righe, oppure hanno lo stesso numero di righe ma in un ordine incoerente, potresti abbinare un insieme di colonne all’altro in modo privo di senso.

Estendiamo l’esempio precedente. Supponi di avere due file di dati: uno contiene la casa automobilistica e il numero di modelli unici offerti, e un altro contiene la casa automobilistica e le vendite totali:

Numero di modelli unici offerti

MakeNum models
Honda63
BMW10
Ford26
Tesla4

Vendite totali

MakeSales
Ford119157
BMW25908
Honda188328
Tesla29975

È importante notare che, se hai la stessa osservazione presente in più dataset e li concateni orizzontalmente usando cbind(), finirai con colonne ridondanti nella tabella. E, sebbene i due dataset contengano informazioni correlate, l’ordinamento delle righe conta!

Nella console qui sotto, chiama cbind() su models e sales e stampa il risultato:


            # Add datasets horizontally
            cbind(models, sales)
            

Dovresti ottenere qualcosa di simile a questo:

Modelli e vendite

MakeNum modelsMakeSales
Honda63Ford119157
BMW10BMW25908
Ford26Honda188328
Tesla4Tesla29975

Vedi il problema? Questi dati non sono tidy!

Secondo i principi dei dati ordinati spiegati in questo corso introduttivo, ogni osservazione di un dataset dovrebbe essere rappresentata in una riga unica. E se avessi informazioni solo su alcune righe in un dataset e volessi aggiungere informazioni solo per quelle di cui sai di più? In altre parole, cosa succede se vuoi aggiungere più colonne da un dataset a un altro, ma questi dataset non hanno lo stesso numero di osservazioni?

Chiave primaria e chiavi esterne

Il primo passo quando vuoi combinare dei dataset è cercare la chiave primaria del tuo dataset. La chiave primaria è la colonna o l’insieme di colonne che identifica in modo univoco ogni osservazione nel tuo dataset. Nell’esempio con le case automobilistiche, il numero di modelli unici offerti e le vendite totali, la chiave primaria dei tuoi dataset è la colonna make.

Ora possiamo eseguire i join, il modo standard per unire i dataset in un’unica tabella.

Tipi di join

Esistono molti tipi di join. Puoi imparare come arricchire le colonne di un dataset con quelle di un altro con i mutating join, come filtrare un dataset rispetto a un altro con i filtering join e come passare al setaccio i dataset con le operazioni insiemistiche nel corso Joining Data in R with dplyr. Di seguito alcuni dei più comuni.

left_join(x, y): restituisce tutte le righe di x e tutte le colonne di x e y. Le righe di x senza corrispondenza in y avranno valori NA nelle nuove colonne. Se ci sono più corrispondenze tra x e y, vengono restituite tutte le combinazioni delle corrispondenze.

inner_join(x, y): restituisce tutte le righe di x per cui esistono valori corrispondenti in y, e tutte le colonne di x e y. Se ci sono più corrispondenze tra x e y, vengono restituite tutte le combinazioni delle corrispondenze.

full_join(x, y): restituisce tutte le righe e tutte le colonne sia di x che di y. Dove non ci sono valori corrispondenti, la funzione restituisce NA per quello mancante.

I join menzionati sopra sono esempi di mutating join poiché combinano variabili da due dataset.

Chiavi mancanti

Supponi di avere due dataset. Il primo si chiama size e contiene i nomi delle persone e la loro taglia di maglietta:

 > size
name size
1  Tom    M
2  Dan   XL
3 Keil    S

Il secondo dataset si chiama color e contiene i cognomi delle persone, le preferenze del colore della maglietta e memorizza alcune informazioni nell’attributo row.names:

 > color
     surname color
Tom     Jeon  <NA>
Dan    Smith  Dark
Bob McLadden Light

Noti cosa potrebbe andare storto? I join tra due tabelle possono complicarsi quando ci sono chiavi mancanti o duplicate. In questo esempio, i data frame di R memorizzano informazioni importanti nell’attributo row.names. In questo caso, non potrai accedere alla chiave con una funzione di join, perché le funzioni di join possono accedere solo alle colonne del data frame.

Il trucco per risolvere facilmente questo problema è usare la funzione rownames_to_column() del pacchetto tibble. Restituisce una copia del tuo dataset con i nomi di riga aggiunti ai dati come colonna. Il primo argomento di rownames_to_column() è il tuo oggetto data frame e il secondo è una stringa che specifica il nome della colonna che vuoi aggiungere.

Prova a esplorare nella console qui sotto. I dataset size e color sono già caricati nel tuo workspace.


            # Explore here!

            

Considerazioni finali

Nella realtà, i dati possono essere suddivisi in molti dataset e in molti formati diversi. Poiché R è progettato per lavorare con singole tabelle di dati, manipolare e combinare i dataset in un’unica tabella è una competenza essenziale. Completa il percorso di competenze Importing & Cleaning Data with R e impara a fare il parsing e a combinare dati in qualsiasi formato. Dai un’occhiata al tutorial R Data Import di DataCamp. Buono studio!

Argomenti

Correlato