Una sorgente dati molto comune sono i cosiddetti file CSV (comma-separated values), ovvero comuni file di testo che contengono dati disposti per righe, ognuna delle quali solitamente rispetta lo stesso numero e tipo di informazione delle altre. I dati su ogni riga sono divisi da una virgola (comma, in inglese), da cui prendono il nome questo genere di file.
Le virgole separatrici svolgono lo stesso ruolo delle colonne in un foglio di calcolo, tanto che un CSV può essere visto come
l'equivalente testuale di una tabella di un foglio Excel. Vediamo un esempio:
Tessera;Cognome;Nome;Iscrizione
125669A;Rossi;Emilio;26/03/2005
739885A;Verdi;Alberto;11/05/1999
Lo stralcio precedente mostra un esempio di CSV composto da una prima riga di intestazione, e le due righe successive di dati puri.
Questo formato di file è generalmente utilizzato per distribuire grandi moli di informazioni - spesso a
carattere scientifico o economico - che possono essere resi bene in formato tabellare. Vediamo in R
come farne uso.
Lettura e scrittura di CSV in R
La funzione read.table
permette di leggere il contenuto di un file CSV in un
data.frame:
df <- read.table("D:\\dati\\sorgente.csv", sep=",")
Il comando recupera dati dal file D:\dati\sorgente.csv, spezzetta una riga alla volta in base
al separatore (che può quindi essere anche diverso dalla virgola) e mette il tutto in un data.frame che qui indichiamo con la variabile df. Si noti che, per i percorsi su sistema operativo Windows, va raddoppiato il backslash affinchè non venga
interpretato come carattere di escape. Possiamo ottenere conferma di avere ottenuto realmente
un data.frame utilizzando la funzione class
come visto nelle lezioni precedenti:
> class(df)
[1] "data.frame"
Esiste anche la funzione write.table
che permette di salvare un data.frame su un
file CSV. Tale funzione accetta i seguenti parametri:
- la variabile che contiene il data.frame;
- l'indirizzo del file di destinazione;
- il parametro
row.names
impostato aFALSE
se non vorremo trovare i nomi delle righe del data.frame
nel file destinazione; col.names
impostato aFALSE
per evitare nomi delle colonne del data.frame
nel file CSV prodotto;- il parametro
sep
che specifica il separatore da usare - il parametro
append
da impostare aTRUE
se vogliamo che il file destinazione non venga riscritto da
zero ma conservi il precedente contenuto.
Ecco un esempio:
> write.table(df, "D:\\dati\\dest.csv", row.names=FALSE, col.names=FALSE, sep=";")
Nella prossima lezione vedremo qualche ulteriore dettaglio relativo all'interazione con i file CSV, imparando anche a creare ed utilizzare uno script R.