23 ottobre 2007

Importare dati in R da Excel

Sono molte le ricerche per importare dati in R da Excel che da google portano al mio blog, così ho pensato di scrivere delle indicazioni specifiche.
Innanzitutto, come più ampiamente spiegato in questo mio vecchio post, io consiglio l'utilizzo della libreria Rcmdr che permette l'importazione stile "software commerciali" direttamente da un file di Excel, Stata, Minitab, Access, ecc... .
Ma se proprio non si vuol dar retta a questo mio consiglio :-), la procedura è riportata di seguito.
Immaginando di essere in Italia in cui il separatore decimale utilizzato è la virgola, la prima cosa da fare è salvare il foglio Excel in formato testo delimitato da tabulazione. Bisogna stare attenti a non salvare in txt utilizzando il separatore delle migliaia per le variabili (colonne di Excel) aventi Numero come Formato Celle (quindi, in Excel, per le celle con formato Numero: Formato Celle > Numero e togli il segno di spunta in corrispondenza di Usa separatore delle migliaia (,) ). Sto inoltre immaginando, come penso accada in genere, che la prima riga della tabella Excel indichi il nome delle variabili.
A questo punto il codice in R è semplicemente:
x<-read.delim2("C:/miaCartella/mioFile.txt") .
Notate che nell'indicazione del percorso del file si debba usare "/" invece di "\". A questo punto x sarà il data.frame in R corrispondente alla vostra tabella di Excel.
Infine, faccio notare come il seguente comando:
x<-read.table(file="C:/miaCartella/mioFile.txt", header=TRUE, sep="\t", dec=",")
sia perfettamente equivalente al precedente (l'help in linea può aiutare a charirsi le idee).

12 commenti:

Davide Massidda ha detto...

Io solitamente utilizzo un altro metodo, stabilendo una connessione col foglio Excel tramite la libreria RODBC. Immaginiamo di dover leggere il foglio 'Foglio1' del file 'dati.xls':

library(RODBC)
channel <- odbcConnectExcel("dati.xls")
dati <- sqlFetch(channel,"Foglio1")
odbcClose(channel)


... comunque, utilissimo post!

Blu ha detto...

Grazie, mi hai risolto un problema!

Holly ha detto...

e se dovessi esportare un dataset su un foglio di calcolo excel o semplicemente in formato .txt come posso fare?

Holly ha detto...

e se dovessi esportare un dataset su fogli di calcolo Excel o in file txt, che procedure devo seguire?

michele de meo ha detto...

>?write.table

David ha detto...

Sto cercando di importare due serie da Excel a R. Quando tento di fare il grafico con plot(x,y) mi da sempre lo stesso messaggio:

Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ

E con la funzione dim sembrerebbero due vettori con lo stesso numero di righe. Per importarli uso questo codice:

x <- read.table(file="/Users/DAVID/Desktop/TESI DI LAUREA/Date01.csv", header=0, dec=",")
y <- read.table(file="/Users/DAVID/Desktop/TESI DI LAUREA/Serie01.csv", header=0, dec=",")
plot(x,y)

Qualcuno sa darmi una mano? Grazie in anticipo!

michele de meo ha detto...

Dovresti cercare nell'arichivio della mailing list di R.
Cerca qui:
http://www.googlesyndicatedsearch.com/u/newcastlemaths?hl=it&ie=ISO-8859-1&q=Error+in+xy.coords(x%2C+y%2C+xlabel%2C+ylabel%2C+log)+%3A+%27x%27+and+%27y%27+lengths+differ&btnG=Cerca

David ha detto...

Grazie mille!:-) Non pensavo fosse cosi laborioso importare dei dati accipicchia.

ROBI ha detto...

CIAO A TUTTI, HO VISTO CHE PARLATE DI R. ANCHE IO NON RIESCO A IMPORTARE I DATI. HO UN FILE EXCEL, HO PROVATO A TRASFORMARLO IN CSV MA MI INSERISCE TUTTI I DATI NELLA PRIMA COLONNA SEPARANDOLI DA VIRGOLE. VORREI PRIMA METTERE A POSTO QUESTO FILE CSV E POI IMPORTARE. NEL MIO FILE CI SONO ETICHETTE DI COSTI NELLA RIGA 1 E ETICHETTE DI SETTORI NELLA COLONNA 1. MI SAPETE AIUTARE? GRAZIE, ROBI

Anonimo ha detto...

Ma chi se l'è inventato sto programma maledetto!!!!!!!

Anonimo ha detto...

Buonasera, riesumo questo vecchio post per fare una domanda.

Devo fare un analisi di un grosso dataset con R, nel file ho 5 colonne Tempo, value1, value2, value3, evento.

Mi servirebbe prendere tutte le righe relative ai vari eventi (e1,e2,e3...) e fare dei calcoli sui 3 campi value.

Qualcuno ha qualche suggerimento?

grazie mille!

michele de meo ha detto...

Ciao presumo tu abbia i dati in excel, visto che scrivi in questo post.
In tal caso dovrebbe essere molto semplice importare i dati: salva il file excel in csv , quindi importa in base a quanto sopra descritto.
Sebbene sia possibile importare da xls anche con procedimenti differenti, il passaggio per un csv ti garantisce un maggiore controllo di possibili (e apparentemente incomprensibili ) messaggi di errore.
Spero di esserti stato utile