Importieren von Excel-Dateien in R, xlsx oder xls

88

Kann mir bitte jemand helfen, wie ich eine Excel 2007 (.xlsx) -Datei am besten in R importieren kann? Ich habe verschiedene Methoden ausprobiert und keine scheint zu funktionieren. Ich habe ein Upgrade auf 2.13.1, Windows XP, XLSX 0.3.0 durchgeführt. Ich weiß nicht, warum der Fehler immer wieder auftritt. Ich habe es versucht:

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

ODER

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

aber ich bekomme den Fehler:

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

Danke dir.

Nolyugo
quelle
4
Wie oft machst du das? Wenn nur einmal, ist es fast immer am besten, Excel zu verwenden, um in ein offeneres Format zu exportieren, wie z .csv.
Ari B. Friedman
gsk3: Ja, oder Google Text & Tabellen, das seit '09 Excel 2007-Importunterstützung bietet: google.com/support/forum/p/Google%20Docs/… (Hoffentlich funktioniert es jetzt gut.)
Benjamin Atkin
6
Welche Version von R ist das? Welches Betriebssystem? Welche Version von read.xlsx? Hast du den Posting Guide gelesen? </ ripleybot>
Spacedman
2
Können Sie erklären, wie sich diese Frage von stackoverflow.com/questions/6099243/…
Chase
9
Sie haben überprüft, ob R die Datei tatsächlich finden kann, z file.exists("C:/AB_DNA_Tag_Numbers.xlsx").
Ben Bolker

Antworten:

101

Für eine Lösung, die frei von fummeligen externen Abhängigkeiten * ist, gibt es jetzt readxl:

Das readxl-Paket erleichtert das Abrufen von Daten aus Excel in R. Im Vergleich zu vielen vorhandenen Paketen (z. B. gdata, xlsx, xlsReadWrite) weist readxl keine externen Abhängigkeiten auf, sodass die Installation und Verwendung auf allen Betriebssystemen einfach ist. Es wurde entwickelt, um mit tabellarischen Daten zu arbeiten, die in einem einzigen Blatt gespeichert sind.

Readxl unterstützt sowohl das ältere XLS-Format als auch das moderne XML-basierte XLSX-Format. Die Unterstützung von .xls wird durch die Bibliothek libxls C ermöglicht, die viele der Komplexitäten des zugrunde liegenden Binärformats abstrahiert. Zum Parsen von .xlsx verwenden wir die RapidXML C ++ - Bibliothek.

Es kann wie folgt installiert werden:

install.packages("readxl") # CRAN version

oder

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

Verwendung

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

* Nicht unbedingt wahr, es erfordert das RcppPaket , für das wiederum Rtools (für Windows) oder Xcode (für OSX) erforderlich sind, die Abhängigkeiten außerhalb von R sind. Sie müssen jedoch nicht mit Pfaden usw. herumspielen Vorteil gegenüber Java- und Perl-Abhängigkeiten.

Update Es gibt jetzt das Rexcel- Paket. Dies verspricht, Excel-Formatierungen, -Funktionen und viele andere Arten von Informationen aus der Excel-Datei in R zu erhalten.

Ben
quelle
35

Möglicherweise möchten Sie auch das XLConnect-Paket ausprobieren. Ich hatte besseres Glück damit als xlsx (und es kann auch XLS-Dateien lesen).

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

Wenn Sie Probleme damit haben, dass Ihre Datei nicht gefunden wird, wählen Sie sie mit file.choose () aus.

Ian Fellows
quelle
7
Anstatt dass readWorksheet(loadWorkbook(...))Sie das Gleiche etwas prägnanter tun können readWorksheetFromFile(...).
Hugh
Dies funktionierte auf einem meiner problematischen Blätter, auf denen read.xlsx mit "java.lang.IllegalArgumentException: Cell index muss> = 0 sein"
abstürzte
23

Ich würde auf jeden Fall die read.xlsFunktion im gdataPaket ausprobieren , die wesentlich ausgereifter ist als das xlsxPaket. Möglicherweise ist Perl erforderlich ...

Ben Bolker
quelle
21

Aktualisieren

Da die Antwort unten jetzt etwas veraltet ist, möchte ich nur auf das readxl- Paket aufmerksam machen. Wenn die Excel- Tabelle gut formatiert ist, würde ich jetzt readxl verwenden , um aus der Arbeitsmappe zu lesen. Wenn die Blätter schlecht formatiert sind, würde ich immer noch nach CSV exportieren und dann die Probleme in R entweder über read.csv()oder einfach alt behandeln readLines().

Original

Meine bevorzugte Methode ist das Speichern einzelner Excel-Tabellen in CSV-Dateien (Comma Separated Value). Unter Windows sind diese Dateien mit Excel verknüpft, sodass Sie die Doppelklick-Funktion zum Öffnen in Excel nicht verlieren.

CSV-Dateien können mit read.csv()oder in R eingelesen werden , wenn Sie sich an einem Ort befinden oder einen Computer verwenden, der mit einigen europäischen Einstellungen eingerichtet ist (wobei ,Dezimalstelle verwendet wird) read.csv2().

Diese Funktionen haben sinnvolle Standardeinstellungen, die das Lesen entsprechend formatierter Dateien vereinfachen. Bewahren Sie einfach Beschriftungen für Stichproben oder Variablen in der ersten Zeile oder Spalte auf.

Der zusätzliche Vorteil des Speicherns von Dateien in CSV besteht darin, dass die Dateien als einfacher Text sehr einfach weitergegeben werden können und Sie sicher sein können, dass sie überall geöffnet werden können. man braucht kein Excel, um die Daten anzusehen oder zu bearbeiten.

Gavin Simpson
quelle
6
Die CSV würde nicht helfen, da die Arbeitsmappe mehrere Arbeitsblätter enthält und jedes bis zu 100.000 Zeilen enthält. Danke
nolyugo
7
Ich habe gesagt, speichern Sie die einzelnen Blätter als CSV-Dateien - da es sich um einfachen Text handelt, spielt die Größe der Arbeitsblätter keine Rolle. Wenn Sie darauf bestehen, mit Excel-Arbeitsmappen zu arbeiten, werden die verfügbaren Optionen zum Einlesen der Daten in R weitaus komplexer - Alternativen finden Sie in den Paketen RODBC, RDCOM. Wenn Sie sicher sind, dass Sie die Anweisungen zur Verwendung befolgt haben read.xlsx() und über die neuesten Versionen dieses Pakets und R verfügen, senden Sie eine E-Mail an den Paketbetreuer, um einen potenziellen Fehler zu melden.
Gavin Simpson
Es hängt wirklich von den Daten und dem Grad der Interoperabilität ab, die Sie zwischen dem Betriebssystem benötigen. Sobald Ihre Beschriftungen oder Faktoren Nicht-ASCII enthalten UND Sie über Mac / Win / Lin arbeiten müssen, tritt beim Exportieren / Importieren von und nach Excel eine gewisse Verrücktheit auf. Excel kann mit utf-8 nicht ordnungsgemäß umgehen (oder mit csv). In diesem Fall bleiben Sie entweder in Excel oder wechseln zu einer anderen Tabellenkalkulationsanwendung (letztere ist nicht immer möglich).
FvD
18

Beispiel 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Ich würde das 'xlsx'-Paket ausprobieren, da es einfach zu handhaben ist und ausgereift genug scheint
  • funktionierte gut für mich und brauchte keine Zusätze wie Perl oder was auch immer

Beispiel 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • Heutzutage benutze ich readxlund habe gute Erfahrungen damit gemacht.
  • Es werden keine zusätzlichen Dinge benötigt
  • gute Leistung
Petermeissner
quelle
14

Dieses neue Paket sieht gut aus http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf Es benötigt kein rJava und verwendet 'Rcpp' für die Geschwindigkeit.

RockScience
quelle
und es ist in der aktiven Entwicklung
RockScience
1
Ich arbeite mit einigen ziemlich großen Excel-Arbeitsmappen, und openxlxs ist ungefähr die einzige, die mit so großen Dateien umgehen kann.
Jose R
Leider erfordert es "rtools"
Ferdi
@Ferdi. glaube nicht! Nur um das Paket einmal zu erstellen. Nicht zur weiteren Verwendung.
RockScience
5

Wenn Sie auf dasselbe Problem stoßen und R Ihnen einen Fehler gibt - Funktion ".jnew" konnte nicht gefunden werden - Installieren Sie einfach die Bibliothek rJava. Oder wenn Sie es bereits haben, führen Sie einfach die Zeilenbibliothek (rJava) aus. Das sollte das Problem sein.

Außerdem sollte allen klar sein, dass es einfacher ist, mit CSV- und TXT-Dateien zu arbeiten, aber das Leben ist nicht einfach und manchmal muss man nur eine XLSX öffnen.

Wilmer E Henao
quelle
1
wenn lade ich Version 2.8.2 von gdatamir die Startmeldung erhalten gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.klingt für mich wie es Dateien öffnen xlsx sollte, obwohl zugegebenermaßen habe ich es nicht vor kurzem getestet ...
Ben Bolker
1
Ich kann bestätigen, dass gdataVersion 2.8.2 xlsxDateien mit der read.xlsFunktion liest .
Ben
4

Ich habe kürzlich die Funktion von Schaun Wheeler zum Importieren von Excel-Dateien in R entdeckt, nachdem ich festgestellt hatte, dass das xlxs-Paket für R 3.1.0 nicht aktualisiert wurde.

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

Der Dateiname muss die Erweiterung ".xlsx" haben und die Datei kann nicht geöffnet werden, wenn Sie die Funktion ausführen.

Diese Funktion ist sehr nützlich für den Zugriff auf die Arbeit anderer Personen. Die Hauptvorteile gegenüber der Funktion read.csv liegen darin, wann

  • Importieren mehrerer Excel-Dateien
  • Große Dateien importieren
  • Dateien, die regelmäßig aktualisiert werden

Die Verwendung der Funktion read.csv erfordert das manuelle Öffnen und Speichern jedes Excel-Dokuments, was zeitaufwändig und sehr langweilig ist. Die Verwendung der Schaun-Funktion zur Automatisierung des Workflows ist daher eine große Hilfe.

Große Requisiten an Schaun für diese Lösung.

Jonno Bourne
quelle
4

Für mich hat das openxlx-Paket am einfachsten funktioniert.

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");
Henrik Bata
quelle
2

Was ist Ihr Betriebssystem? Welche Version von R verwenden Sie: 32-Bit oder 64-Bit? Welche Java-Version haben Sie installiert?

Ich hatte einen ähnlichen Fehler, als ich die read.xlsx()Funktion zum ersten Mal verwendete und feststellte, dass mein Problem (das möglicherweise mit Ihrem Problem zusammenhängt oder nicht; zumindest sollte diese Antwort als "Versuchen Sie es auch" angesehen werden) mit der Inkompatibilität zusammenhängt von .xlsx pacakge mit 64-Bit Java. Ich bin mir ziemlich sicher, dass das XLSX-Paket 32-Bit-Java erfordert.

Verwenden Sie 32-Bit-R und stellen Sie sicher, dass 32-Bit-Java installiert ist. Dies kann Ihr Problem beheben.

user2755425
quelle
2

Sie haben überprüft, ob R die Datei tatsächlich finden kann, z. B. file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker 14. August 11 um 23:05 Uhr

Der obige Kommentar hätte Ihr Problem lösen sollen:

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

sollte danach gut funktionieren.

Widerspruch
quelle
1

Möglicherweise können Sie mehrere Registerkarten und weitere Formatierungsinformationen beibehalten, wenn Sie in eine OpenDocument Spreadsheet-Datei ( ods ) oder ein älteres Excel-Format exportieren und diese mit dem oben genannten ODS-Reader oder Excel-Reader importieren .

Benjamin Atkin
quelle
1

Wie von vielen hier gesagt, schreibe ich das Gleiche, aber mit einem zusätzlichen Punkt!

Zuerst müssen wir sicherstellen, dass in unserem R Studio diese beiden Pakete installiert sind:

  1. "readxl"
  2. "XLConnect"

Um ein Paket in R zu laden, können Sie die folgende Funktion verwenden:

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

Die Suche zeigt die Liste der aktuellen Pakete an, die in Ihrem R Studio verfügbar sind.

Jetzt noch ein Haken, obwohl Sie vielleicht diese beiden Pakete haben, aber dennoch Probleme beim Lesen der "xlsx" -Datei auftreten und der Fehler wie folgt aussehen könnte: "Fehler: mehr Spalten als Spaltenname"

Um dieses Problem zu lösen, können Sie einfach Ihr Excel-Blatt "xlsx" in speichern

"CSV (durch Kommas getrennt)"

und dein Leben wird super einfach sein ....

Habe Spaß!!

Rajeev Kumar Barnwal
quelle
1

Ich habe mich sehr um alle obigen Antworten bemüht. Sie haben jedoch nicht wirklich geholfen, da ich einen Mac verwendet habe. Die Rio-Bibliothek verfügt über diese Importfunktion, mit der grundsätzlich alle Arten von Datendateien in Rstudio importiert werden können , auch solche, die andere Sprachen als Englisch verwenden!

Versuchen Sie die folgenden Codes:

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

Ich hoffe das hilft. Weitere Informationen finden Sie unter: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Suyang Xu
quelle