Esportare dati da R a Excel

Nel precedente post, Antonello Preti ci ha spiegato i principali metodi che si utilizzano per importare dati da SPSS o Excel in R. Già in passato avevamo affrontato l’argomento parlando della libreria XLConnect, ma i metodi proposti da Antonello sono certamente più immediati e universali. Dico “universali” perché le funzioni proposte, ovvero read.table, read.csv e read.csv2 si appoggiano a file in formato testuale che possono essere aperti da qualsiasi applicativo dedicato, che sia Office, OpenOffice, LibreOffice o altri.

CSV file

Quando si lavora con R bisogna mettersi in testa che il formato di riferimento non è più né XLS né ODS, ma quello testuale: .txt, .csv, .dat… l’importante è che il file contenga solo ed esclusivamente testo. Bisogna considerare, comunque, che universalmente il formato riconosciuto per i dati è il CSV, acronimo di “Comma-Separated Values”, ed è il formato che io sempre consiglio, sia perché l’estensione .csv indica inconfondibilmente un file contenente dati (mentre .txt può contenere qualsiasi tipo di testo) sia perché è automaticamente riconosciuto dai principali applicativi di tipo “spreadsheet” come Excel.

Le funzioni per esportare tabelle di dati da R a file di tipo testuale sono write.table, write.csv e write.csv2. La funzione write.table è quella generica che va bene per qualsiasi tipo di file, mentre le altre due sono specifiche per salvare file in formato CSV.

Partiamo da write.table. Non starò qui a elencare tutti i dettagli ma mi limiterò a parlare delle opzioni principali che è importante conoscere. Il comando funziona così:

write.table(x, file="mydata.txt", quote=T, sep=" ", dec=".", na="NA", row.names=T, col.names=T)

L’argomento x è l’oggetto R che contiene il dataset, mentre file è una stringa di carattere che contiene il nome (con l’estensione) che dovrà avere il file da creare. Da notare che io in questo esempio ho utilizzato l’estensione .txt, ma nessuno mi avrebbe impedito di utilizzare altri formati. L’argomento quote specifica se, nel file, le stringhe di carattere – che siano nomi di colonna oppure valori contenuti nel dataset – dovranno essere scritti tra doppi apici.

Veniamo ora alla parte calda, ovvero gli argomenti sep e dec. Il primo indica quale sarà il separatore di campo, ovvero quel carattere che dovrà essere interposto tra un dato e l’altro all’interno di una stessa riga. Invece, dec specifica quale dovrà essere il separatore decimale (normalmente o il punto oppure la virgola).

Altra cosa da non trascurare è l’argomento na, che indica quale dovrà essere il carattere che codifica i valori mancanti. Io di solito amo lasciare le celle vuote, per cui specifico na="", ma altri preferiscono usare sequenze di numeri come na="999".

Gli ultimi due argomenti specificano se nel file dovranno essere inseriti anche i nomi di riga (row.names) e di colonna (col.names); se T (TRUE), questi saranno salvati, altrimenti se non li si vuole salvare si specificherà F (FALSE).

Veniamo ora a un esempio. Immaginiamo di avere un oggetto R di tipo “data frame” (ovvero una tabella di dati) chiamato dataset che vogliamo esportare in Excel. Come abbiamo visto, piuttosto che esportarlo direttamente in Excel è più comodo salvarlo in un file CSV che poi Excel potrà leggere molto agevolmente. Per eseguire questa operazione possiamo usare proprio write.table:

write.table(dataset, file="dataset.csv", quote=F, sep=";", dec=",", na="", row.names=T, col.names=T)

Io non ho voluto incapsulare le stringhe fra apici (quote=F) e ho preferito lasciare le celle vuote dove sono presenti dei dati mancanti (na=""); non ho voluto i nomi di riga (row.names=F) ma ho tenuto quelli di colonna (col.names=T), che saranno poi fondamentali per indentificare le variabili. Da notare che, per ottenere un vero e proprio file CSV, ho dovuto specificare il punto e virgola come separatore di campo e la virgola come separatore decimale.

Dato che volevo un file CSV, avrei potuto utilizzare direttamente l’apposita funzione:

write.csv2(dataset, file="dataset.csv", quote=F, na="", row.names=T, col.names=T)

Come si vede, non c’è molta differenza con write.table; fondamentalmente, read.csv e read.csv2 hanno dei valori predefiniti per gli argomenti sep e dec già pensati per l’estensione .csv, cosa che rende più rapido scrivere l’istruzione. Inoltre, bisogna notare che l’argomento col.names è in tutti i casi TRUE già di default, quindi può essere omesso.

La morale della favola è che, come per importare i dati, anche per esportarli dobbiamo appoggiarci al formato CSV; R mette a disposizione queste due funzioni, read.csv2 e write.csv2 che rendono il lavoro più agevole.

Infine, una considerazione personale. Il CSV è il formato più usato per condividere dati perché è un formato aperto che può essere letto attraverso qualsiasi dispositivo di gestione e analisi dati. Spesso diamo così per scontato l’uso di Excel o SPSS da dimenticarci che, in realtà, moltissime persone non usano questi software – spesso manco li hanno – ma si avvalgono di altri sistemi, come appunto OpenOffice e LibreOffice. Il formato XLS non è universale, il CSV sì. Abituiamoci a usarlo.

Print Friendly, PDF & Email
Print Friendly, PDF & Email

Commenti per “Esportare dati da R a Excel

Lascia un commento