Importazione di file Excel in R, xlsx o xls


89

Per favore qualcuno può aiutarmi sul modo migliore per importare un file Excel 2007 (.xlsx) in R. Ho provato diversi metodi e nessuno sembra funzionare. Ho aggiornato a 2.13.1, Windows XP, xlsx 0.3.0, non so perché l'errore continua a comparire. Provai:

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx","DNA_Tag_Numbers")

O

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx",1)

ma ottengo l'errore:

 Error in .jnew("java/io/FileInputStream", file) : 
  java.io.FileNotFoundException: C:\AB_DNA_Tag_Numbers.xlsx (The system cannot find the file specified)

Grazie.


4
Quante volte lo fai? Se solo una volta, è quasi sempre meglio usare Excel per esportare in un formato più aperto, come .csv.
Ari B. Friedman

gsk3: Sì, o Google Docs, che ha il supporto per l'importazione di Excel 2007 dal '09: google.com/support/forum/p/Google%20Docs/… (Si spera che ora funzioni bene.)
Benjamin Atkin

6
Che versione di R è questa? Quale sistema operativo? Quale versione di read.xlsx? Hai letto la guida alla pubblicazione? </ripleybot>
Spacedman

2
Puoi spiegare in che modo questa domanda è diversa da stackoverflow.com/questions/6099243/…
Chase

9
Hai verificato che R è effettivamente in grado di trovare il file, ad esempio file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker

Risposte:


101

Per una soluzione priva di complicate dipendenze esterne *, ora c'è readxl:

Il pacchetto readxl semplifica l'estrazione dei dati da Excel e in R. Rispetto a molti dei pacchetti esistenti (ad esempio gdata, xlsx, xlsReadWrite) readxl non ha dipendenze esterne quindi è facile da installare e utilizzare su tutti i sistemi operativi. È progettato per funzionare con dati tabulari archiviati in un unico foglio.

Readxl supporta sia il formato legacy .xls che il moderno formato .xlsx basato su xml. Il supporto .xls è reso possibile dalla libreria C con libxls, che astrae molte delle complessità del formato binario sottostante. Per analizzare .xlsx, utilizziamo la libreria RapidXML C ++.

Può essere installato in questo modo:

install.packages("readxl") # CRAN version

o

devtools::install_github("hadley/readxl") # development version

Utilizzo

library(readxl)

# read_excel reads both xls and xlsx files
read_excel("my-old-spreadsheet.xls")
read_excel("my-new-spreadsheet.xlsx")

# Specify sheet with a number or name
read_excel("my-spreadsheet.xls", sheet = "data")
read_excel("my-spreadsheet.xls", sheet = 2)

# If NAs are represented by something other than blank cells,
# set the na argument
read_excel("my-spreadsheet.xls", na = "NA")

* non strettamente vero, richiede il Rcpppacchetto , che a sua volta richiede Rtools (per Windows) o Xcode (per OSX), che sono dipendenze esterne a R. Ma non richiedono alcuna manipolazione con i percorsi, ecc., quindi è un vantaggio rispetto alle dipendenze Java e Perl.

Aggiorna Ora è disponibile il pacchetto rexcel . Ciò promette di ottenere la formattazione di Excel, le funzioni e molti altri tipi di informazioni dal file Excel e in R.


35

Puoi anche provare il pacchetto XLConnect. Ho avuto più fortuna con esso rispetto a xlsx (inoltre può leggere anche file .xls).

library(XLConnect)
theData <- readWorksheet(loadWorkbook("C:/AB_DNA_Tag_Numbers.xlsx"),sheet=1)

inoltre, se hai problemi con il tuo file non trovato, prova a selezionarlo con file.choose ().


7
Piuttosto che readWorksheet(loadWorkbook(...))puoi fare lo stesso un po 'più succintamente con readWorksheetFromFile(...).
Hugh

Questo ha funzionato su uno dei miei fogli problematici su cui read.xlsx si è bloccato con "java.lang.IllegalArgumentException: l'indice delle celle deve essere> = 0"
ski_squaw

23

Proverei sicuramente la read.xlsfunzione nel gdatapacchetto, che è notevolmente più matura del xlsxpacchetto. Potrebbe richiedere Perl ...


21

Aggiornare

Poiché la risposta di seguito è ora un po 'obsoleta, attirerei semplicemente l'attenzione sul pacchetto readxl . Se il foglio Excel è ben formattato / disposto, ora utilizzerei readxl per leggere dalla cartella di lavoro. Se i fogli sono formattati / disposti male, esporterei comunque in CSV e quindi gestirò i problemi in R tramite read.csv()o semplicemente vecchio readLines().

Originale

Il mio modo preferito è salvare i singoli fogli Excel in file CSV (valori separati da virgole). Su Windows, questi file sono associati a Excel in modo da non perdere la "funzione" di apertura in Excel del doppio clic.

I file CSV possono essere letti in R utilizzando read.csv()oppure, se ci si trova in un luogo o utilizzando un computer configurato con alcune impostazioni europee (dove ,viene utilizzato come cifra decimale), utilizzando read.csv2().

Queste funzioni hanno impostazioni predefinite sensibili che rendono semplice la lettura di file formattati in modo appropriato. Mantieni semplicemente le etichette per campioni o variabili nella prima riga o colonna.

I vantaggi aggiuntivi dell'archiviazione dei file in CSV sono che, poiché i file sono testo normale, possono essere trasferiti molto facilmente e puoi essere certo che si apriranno ovunque; non è necessario Excel per esaminare o modificare i dati.


6
Il CSV non sarebbe di aiuto poiché la cartella di lavoro contiene diversi fogli di lavoro e ognuno ha fino a 100.000 righe. Grazie
nolyugo

7
Ho detto di salvare i singoli fogli come file CSV: poiché si tratta di testo normale, la dimensione dei fogli di lavoro è irrilevante. Se ti ostini a lavorare con le cartelle di lavoro di Excel, le opzioni disponibili per leggere i dati in R diventano molto più complesse: vedere i pacchetti RODBC, RDCOM per le alternative. Infine, se sei certo di aver seguito le istruzioni per l'uso read.xlsx() e di avere le ultime versioni di quel pacchetto e di R, invia un'e-mail al manutentore del pacchetto per segnalare un potenziale bug.
Gavin Simpson

Dipende davvero dai dati e dal livello di interoperabilità richiesti tra i sistemi operativi. Non appena è presente non ASCII nelle etichette o nei fattori E devi lavorare su Mac / Win / Lin, inizieranno a verificarsi stranezze assortite se esporti / importi da e verso Excel. Excel non può gestire utf-8 con grazia (o csv per quella materia). Quindi in questo caso o rimani in Excel o ti sposti in un'altra applicazione per fogli di calcolo (quest'ultima non è sempre possibile).
FvD

18

Esempio 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Proverei il pacchetto "xlsx" perché è facile da gestire e sembra abbastanza maturo
  • ha funzionato bene per me e non avevo bisogno di addizionali come Perl o altro

Esempio 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • al giorno d'oggi lo uso readxle ne ho fatto una buona esperienza.
  • non sono necessarie cose extra
  • buona performance

14

Questo nuovo pacchetto sembra carino http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf Non richiede rJava e usa "Rcpp" per la velocità.


ed è in fase di sviluppo attivo
RockScience

1
Sto lavorando con alcune cartelle di lavoro Excel piuttosto grandi e openxlxs è quasi l'unico in grado di gestire file così grandi.
Jose R

Purtroppo richiede "rtools"
Ferdi

@Ferdi. non credo proprio! Solo per creare il pacchetto una volta. Non per ulteriore utilizzo.
RockScience

5

Se stai riscontrando lo stesso problema e R ti dà un errore - impossibile trovare la funzione ".jnew" - Basta installare la libreria rJava. Oppure, se lo hai già, esegui la line library (rJava). Questo dovrebbe essere il problema.

Inoltre, dovrebbe essere chiaro a tutti che i file csv e txt sono più facili da lavorare, ma la vita non è facile ea volte devi solo aprire un xlsx.


1
quando carico la versione 2.8.2 di gdataottengo il messaggio di avvio gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.Mi sembra che dovrebbe aprire file xlsx, anche se devo ammettere che non l'ho provato di recente ...
Ben Bolker

1
Posso confermare che la gdataversione 2.8.2 legge i xlsxfile con la read.xlsfunzione.
Ben

4

Recentemente ho scoperto la funzione di Schaun Wheeler per importare file Excel in R dopo aver realizzato che il pacchetto xlxs non era stato aggiornato per R 3.1.0.

https://gist.github.com/schaunwheeler/5825002

Il nome del file deve avere l'estensione ".xlsx" e il file non può essere aperto quando si esegue la funzione.

Questa funzione è davvero utile per accedere al lavoro di altre persone. I principali vantaggi rispetto all'uso della funzione read.csv sono quando

  • Importazione di più file Excel
  • Importazione di file di grandi dimensioni
  • File che vengono aggiornati regolarmente

L'utilizzo della funzione read.csv richiede l'apertura manuale e il salvataggio di ogni documento Excel che richiede tempo e molto noioso. L'utilizzo della funzione di Schaun per automatizzare il flusso di lavoro è quindi di enorme aiuto.

Grandi vantaggi a Schaun per questa soluzione.


4

Per me il pacchetto openxlx ha funzionato nel modo più semplice.

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");

2

Qual è il tuo sistema operativo? Quale versione di R stai utilizzando: 32 bit o 64 bit? Quale versione di Java hai installato?

Ho read.xlsx()riscontrato un errore simile quando ho iniziato a utilizzare la funzione per la prima volta e ho scoperto che il mio problema (che potrebbe o meno essere correlato al tuo; come minimo, questa risposta dovrebbe essere vista come "prova anche questo") era correlato all'incompatibilità di .xlsx pacakge con Java a 64 bit. Sono abbastanza certo che il pacchetto .xlsx richieda Java a 32 bit.

Usa R a 32 bit e assicurati che sia installato Java a 32 bit. Questo potrebbe risolvere il tuo problema.


2

Hai verificato che R è effettivamente in grado di trovare il file, ad esempio file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker 14 agosto 11 alle 23:05

Il commento sopra dovrebbe aver risolto il tuo problema:

require("xlsx")
read.xlsx("filepath/filename.xlsx",1) 

dovrebbe funzionare bene dopo.


1

Potresti essere in grado di mantenere più schede e più informazioni di formattazione se esporti in un file di foglio di calcolo OpenDocument ( ods ) o in un formato Excel precedente e lo importi con il lettore ODS o il lettore Excel che hai menzionato sopra.


1

Come affermato da molti qui, sto scrivendo la stessa cosa ma con un punto in più!

All'inizio dobbiamo assicurarci che il nostro R Studio abbia questi due pacchetti installati:

  1. "readxl"
  2. "XLConnect"

Per caricare un pacchetto in R puoi usare la seguente funzione:

install.packages("readxl/XLConnect")
library(XLConnect)
search()

ricerca mostrerà l'elenco dei pacchetti correnti disponibili in R Studio.

Ora un altro problema, anche se potresti avere questi due pacchetti ma potresti comunque riscontrare problemi durante la lettura del file "xlsx" e l'errore potrebbe essere del tipo "errore: più colonne del nome della colonna"

Per risolvere questo problema puoi semplicemente salvare nuovamente il tuo foglio Excel "xlsx" in

"CSV (delimitato da virgole)"

e la tua vita sarà semplicissima ...

Divertiti!!


1

Ho provato molto duramente con tutte le risposte sopra. Tuttavia, in realtà non hanno aiutato perché ho usato un Mac. La libreria rio ha questa funzione di importazione che può importare praticamente qualsiasi tipo di file di dati in Rstudio , anche quei file che utilizzano lingue diverse dall'inglese!

Prova i codici di seguito:

    library(rio)
    AB <- import("C:/AB_DNA_Tag_Numbers.xlsx")
    AB <- AB[,1]

Spero che questo aiuto. Per riferimenti più dettagliati: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.