Importation de fichiers Excel dans R, xlsx ou xls


89

Quelqu'un peut-il m'aider sur la meilleure façon d'importer un fichier Excel 2007 (.xlsx) dans R. J'ai essayé plusieurs méthodes et aucune ne semble fonctionner. J'ai mis à niveau vers 2.13.1, Windows XP, xlsx 0.3.0, je ne sais pas pourquoi l'erreur continue à apparaître. J'ai essayé:

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

OU

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

mais j'obtiens l'erreur:

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

Je vous remercie.


4
Combien de fois faites-vous cela? Si ce n'est qu'une seule fois, il est presque toujours préférable d'utiliser Excel pour exporter vers un format plus ouvert, comme .csv.
Ari

gsk3: Oui, ou Google Docs, qui prend en charge l'importation d'Excel 2007 depuis '09: google.com/support/forum/p/Google%20Docs/... (J'espère que cela fonctionne bien maintenant.)
Benjamin Atkin

6
De quelle version de R s'agit-il? Quel système d'exploitation? Quelle version de read.xlsx? Avez-vous lu le guide de publication? </ripleybot>
Spacedman

2
Pouvez-vous expliquer en quoi cette question est différente de stackoverflow.com/questions/6099243/…
Chase

9
Vous avez vérifié que R est réellement capable de trouver le fichier, par exemple file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker

Réponses:


101

Pour une solution exempte de dépendances externes fastidieuses *, il existe maintenant readxl:

Le package readxl facilite l'extraction des données d'Excel vers R. Comparé à de nombreux packages existants (par exemple gdata, xlsx, xlsReadWrite) readxl n'a pas de dépendances externes, il est donc facile à installer et à utiliser sur tous les systèmes d'exploitation. Il est conçu pour fonctionner avec des données tabulaires stockées dans une seule feuille.

Readxl prend en charge à la fois le format .xls hérité et le format .xlsx moderne basé sur xml. La prise en charge de .xls est rendue possible par la bibliothèque with libxls C, qui résume la plupart des complexités du format binaire sous-jacent. Pour analyser .xlsx, nous utilisons la bibliothèque RapidXML C ++.

Il peut être installé comme ceci:

install.packages("readxl") # CRAN version

ou

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

Usage

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

* pas strictement vrai, il nécessite le Rcpppackage , qui à son tour nécessite Rtools (pour Windows) ou Xcode (pour OSX), qui sont des dépendances externes à R. Mais ils ne nécessitent pas de manipuler les chemins, etc., donc c'est un avantage par rapport aux dépendances Java et Perl.

Mise à jour Il existe maintenant le package rexcel . Cela promet d'obtenir le formatage Excel, les fonctions et de nombreux autres types d'informations à partir du fichier Excel et dans R.


35

Vous pouvez également essayer le package XLConnect. J'ai eu plus de chance avec cela que xlsx (en plus, il peut lire les fichiers .xls aussi).

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

De plus, si vous rencontrez des problèmes avec votre fichier introuvable, essayez de le sélectionner avec file.choose ().


7
Plutôt que de readWorksheet(loadWorkbook(...))faire la même chose un peu plus succinctement avec readWorksheetFromFile(...).
Hugh

Cela a fonctionné sur l'une de mes feuilles gênantes sur lesquelles read.xlsx s'est écrasé avec "java.lang.IllegalArgumentException: L'index de la cellule doit être> = 0"
ski_squaw

23

J'essaierais certainement la read.xlsfonction dans le gdatapackage, qui est considérablement plus mature que le xlsxpackage. Cela peut nécessiter Perl ...


21

Mettre à jour

Comme la réponse ci-dessous est maintenant quelque peu obsolète, je voudrais simplement attirer l'attention sur le package readxl . Si la feuille Excel est bien formatée / disposée, j'utiliserais maintenant readxl pour lire le classeur. Si les feuilles sont mal formatées / disposées, j'exporterais toujours au format CSV, puis je gérerais les problèmes dans R via read.csv()ou à l'ancienne readLines().

Original

Ma méthode préférée est d'enregistrer des feuilles Excel individuelles dans des fichiers de valeurs séparées par des virgules (CSV). Sous Windows, ces fichiers sont associés à Excel afin que vous ne perdiez pas la "fonctionnalité" double-clic-ouvrir-dans-Excel.

Les fichiers CSV peuvent être lus dans R en utilisant read.csv(), ou, si vous êtes dans un emplacement ou en utilisant un ordinateur configuré avec certains paramètres européens (où ,est utilisé comme décimale), en utilisant read.csv2().

Ces fonctions ont des valeurs par défaut sensibles qui simplifient la lecture des fichiers correctement formatés. Conservez simplement les étiquettes des échantillons ou des variables dans la première ligne ou colonne.

Les avantages supplémentaires du stockage des fichiers au format CSV sont que, comme les fichiers sont en texte brut, ils peuvent être transmis très facilement et vous pouvez être sûr qu'ils s'ouvriront n'importe où; on n'a pas besoin d'Excel pour regarder ou modifier les données.


6
Le csv n'aiderait pas car le classeur contient plusieurs feuilles de calcul et chacune contient jusqu'à 100 000 lignes. Merci
nolyugo

7
J'ai dit de sauvegarder les feuilles individuelles en tant que fichiers CSV - comme il s'agit de texte brut, la taille des feuilles de calcul n'est pas pertinente. Si vous insistez pour travailler avec des classeurs Excel, les options disponibles pour lire les données dans R deviennent beaucoup plus complexes - voir les packages RODBC, RDCOM pour des alternatives. Enfin, si vous êtes certain d'avoir suivi les instructions d'utilisation read.xlsx() et d' avoir les dernières versions de ce paquet et de R, envoyez un e-mail au responsable du paquet pour signaler un bogue potentiel.
Gavin Simpson

Cela dépend vraiment des données et du niveau d'interopérabilité dont vous avez besoin entre os. Dès qu'il y a non-ascii dans vos étiquettes ou facteurs ET que vous devez travailler sur Mac / Win / Lin, des bizarreries variées commenceront à se produire si vous exportez / importez vers et depuis Excel. Excel ne peut pas gérer correctement utf-8 (ou csv d'ailleurs). Donc dans ce cas, soit vous restez dans Excel, soit vous passez à une autre application de feuille de calcul (ce dernier n'est pas toujours possible).
FvD

18

Exemple 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • J'essaierais le paquet 'xlsx' car il est facile à manipuler et semble assez mature
  • a bien fonctionné pour moi et je n'ai pas besoin d'ajouts comme Perl ou autre

Exemple 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • aujourd'hui j'utilise readxlet j'en ai fait une bonne expérience.
  • aucun truc supplémentaire nécessaire
  • bonne performance

14

Ce nouveau paquet a l'air bien http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf Il ne nécessite pas rJava et utilise 'Rcpp' pour la vitesse.


et il est en cours de développement actif
RockScience

1
Je travaille avec des classeurs Excel assez volumineux, et openxlxs est à peu près le seul qui peut gérer des fichiers aussi volumineux.
Jose R

Malheureusement, il nécessite "rtools"
Ferdi

@Ferdi. ne pense pas! Juste pour créer le package une fois. Pas pour une utilisation ultérieure.
RockScience

5

Si vous rencontrez le même problème et que R vous donne une erreur - n'a pas pu trouver la fonction ".jnew" - Installez simplement la bibliothèque rJava. Ou si vous l'avez déjà, lancez simplement la bibliothèque de lignes (rJava). Cela devrait être le problème.

De plus, il devrait être clair pour tout le monde que les fichiers csv et txt sont plus faciles à utiliser, mais la vie n'est pas facile et parfois il suffit d'ouvrir un xlsx.


1
quand je charge la version 2.8.2 de gdataje reçois le message de démarrage Il gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.me semble que cela devrait ouvrir des fichiers xlsx, bien que je ne l'ai pas testé récemment ...
Ben Bolker

1
Je peux confirmer que la gdataversion 2.8.2 lit les xlsxfichiers avec la read.xlsfonction.
Ben

4

J'ai récemment découvert la fonction de Schaun Wheeler pour importer des fichiers Excel dans R après avoir réalisé que le package xlxs n'avait pas été mis à jour pour R 3.1.0.

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

Le nom de fichier doit avoir l'extension ".xlsx" et le fichier ne peut pas être ouvert lorsque vous exécutez la fonction.

Cette fonction est vraiment utile pour accéder au travail d'autres personnes. Les principaux avantages par rapport à l'utilisation de la fonction read.csv sont lorsque

  • Importer plusieurs fichiers Excel
  • Importer des fichiers volumineux
  • Fichiers mis à jour régulièrement

L'utilisation de la fonction read.csv nécessite l'ouverture et l'enregistrement manuels de chaque document Excel, ce qui prend du temps et est très ennuyeux. Utiliser la fonction de Schaun pour automatiser le flux de travail est donc une aide considérable.

Gros accessoires à Schaun pour cette solution.


4

Pour moi, le package openxlx a fonctionné de la manière la plus simple.

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

2

Quel est votre système d'exploitation? Quelle version de R utilisez-vous: 32 bits ou 64 bits? Quelle version de Java avez-vous installée?

J'ai eu une erreur similaire lorsque j'ai commencé à utiliser la read.xlsx()fonction et j'ai découvert que mon problème (qui peut ou non être lié au vôtre; au minimum, cette réponse doit être considérée comme "essayez ceci aussi") était lié à l'incompatibilité de .xlsx pacakge avec Java 64 bits. Je suis assez certain que le package .xlsx nécessite Java 32 bits.

Utilisez R 32 bits et assurez-vous que Java 32 bits est installé. Cela peut résoudre votre problème.


2

Vous avez vérifié que R est réellement capable de trouver le fichier, par exemple file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker le 14 août 11 à 23:05

Le commentaire ci-dessus aurait dû résoudre votre problème:

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

devrait bien fonctionner après cela.


1

Vous pourrez peut-être conserver plusieurs onglets et plus d'informations de mise en forme si vous exportez vers un fichier de feuille de calcul OpenDocument ( ods ) ou un ancien format Excel et que vous l'importez avec le lecteur ODS ou le lecteur Excel que vous avez mentionné ci-dessus.


1

Comme beaucoup l'ont dit ici, j'écris la même chose mais avec un point supplémentaire!

Au début, nous devons nous assurer que notre R Studio a ces deux packages installés:

  1. "readxl"
  2. «XLConnect»

Pour charger un package dans R, vous pouvez utiliser la fonction ci-dessous:

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

search affichera la liste des packages actuellement disponibles dans votre R Studio.

Maintenant, un autre problème, même si vous pouvez avoir ces deux packages, mais vous pouvez toujours rencontrer un problème lors de la lecture du fichier "xlsx" et l'erreur pourrait être comme "erreur: plus de colonnes que le nom de la colonne"

Pour résoudre ce problème, vous pouvez simplement réenregistrer votre feuille Excel "xlsx" dans

"CSV (délimité par des virgules)"

et votre vie sera super facile ...

S'amuser!!


1

J'ai essayé très dur sur toutes les réponses ci-dessus. Cependant, ils n'ont pas vraiment aidé car j'ai utilisé un mac. La bibliothèque rio a cette fonction d'importation qui peut fondamentalement importer tout type de fichier de données dans Rstudio , même les fichiers utilisant des langues autres que l'anglais!

Essayez les codes ci-dessous:

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

J'espère que cette aide. Pour une référence plus détaillée: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.