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).

19 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

carlo ha detto...

Ciao A tutti,
sto seguendo un corso su R e mi servirebbero dei dati di qualsiasi tipo e su qualsiasi argomento, da usare per una tesina finale.
Possibilmente in Excels.
Chi mi può aiutare?
potete invierli direttamente alla mia mail:
guerrierocarlo@yahoo.it

Grazie

michele de meo ha detto...

ciao qui puoi trovare una raccolta di datasets con cui divertirti:
http://mlr.cs.umass.edu/ml/datasets.html

Anonimo ha detto...

Salve a tutti.
Ho appena caricato un file excel in formato csv in R.
Ora devo fare un'analisi statistica sui dati che ho caricato. Ma se, per esempio, digito la funzione HIST per creare un istogramma mi restituisce questo errore:
"Errore in hist.default(b) : 'x' deve essere numeric"

come posso fare?

Anonimo ha detto...

come faccio a portare i dati da r in stata?

Angela ha detto...

Salve, premetto che è la prima volta che uso questo software, ho letto un po' di guide ed altre spiegazioni on line ma è una settimana che provo a caricare dati e ancora non ci sono riuscita. Ho provato sia con dati exel, che txt ma non ne vuole sapere. I dati non hanno decimali..qualche consiglio??

Anonimo ha detto...

Ciao,
sto facendo dei grafici per un'anlisi dei residui.
Il primo grafico che mette in relazione la dispersione dei residui rispetto ai valori stimati mi viene ed è del tipo:
>plot(reg.ROI$fitted,reg.ROI$residuals, xlab="valori stimati", ylab="residui")
Proseguendo l'analisi rispetto alle singole variabili, ad es.:> plot(N.CDA,reg.ROI$residuals), mi da "Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ". Per risolvere ho cercato se in N.CDA e ROI fossero presenti tutti i dati per riga trovando che in ROI mancano i dati alle righe 9,19,45. Ho quindi fatto:>tmp<-c(9,19,45) e poi:> plot(N.CDA[-tmp],reg.ROI$residuals[-tmp]) ed ora mi da "Error in ROI$residuals : $ operator is invalid for atomic vectors"....Cosa devo fare???

Unknown ha detto...

Ciao ragazzi dovrei fare un project work con linguaggio R...mi sapreste dare una mano? Avete qualche esempio di project? Grazie mille in anticipo!