95 votes

Lire un fichier Excel directement à partir d'un script R

Comment lire un fichier Excel directement dans R? Ou devrais-je d'abord exporter les données dans un fichier texte ou CSV et importer ce fichier dans R?

49voto

JD Long Points 20477

Permettez-moi de répéter ce que @Chase recommandé: Utiliser XLConnect.

Les raisons pour l'utilisation de XLConnect sont, à mon avis:

  1. Multi-plateforme. XLConnect est écrit en Java et, ainsi, sera exécuté sur windows, Linux, Mac avec aucun changement de votre R code (à l'exception peut-être des chaînes de chemin d'accès)
  2. Rien d'autre à charger. Il suffit d'installer XLConnect et commencer à vivre.
  3. Il faut vous concentrer sur la lecture de fichiers Excel, mais XLConnect également écrire des fichiers Excel, y compris la modification de mise en forme de cellule. Et il va le faire à partir de Linux ou de Mac, pas seulement de Gagner.

XLConnect est un peu nouveau par rapport à d'autres solutions, donc il est moins souvent mentionné dans les messages du blog de référence et de documentation. Pour moi, ça a été très utile.

41voto

Ben Bolker Points 50041

Oui. Voir la page correspondante sur le R wiki. Réponse courte: read.xls de la gdata package fonctionne la plupart du temps (bien que vous devez avoir installé de Perl sur votre système (généralement déjà vrai sur MacOS et Linux, mais prend une étape supplémentaire sur Windows, c'est à dire voir http://strawberryperl.com/). Il existe plusieurs mises en garde, et des solutions de rechange, qui est cotée sur le R page wiki.

La seule raison pour laquelle je ne vois pas à le faire directement, c'est que vous pourriez vouloir examiner la feuille de calcul pour voir si elle a des problèmes d'affichage (bizarre, en-têtes, plusieurs feuilles de calcul [vous pouvez lire un à la fois, bien que vous pouvez bien évidemment faire une boucle sur tous], inclus parcelles, etc.). Mais pour un bien formée, rectangulaire feuille de calcul avec la plaine de chiffres et de données de caractère (c'est à dire, pas de virgule format des nombres, des dates, des formules avec une division par zéro, les erreurs, les valeurs manquantes, etc. etc. ..) En général, je n'ai aucun problème avec ce processus.

29voto

Mikko Points 1825

Je l'ai utilisé, xlsxpackage. Il a changé mon flux de travail avec Excel et R. Pas plus ennuyeux pop-ups demander, si je suis sûr que je veux sauver ma feuille Excel .format txt. Le paquet a également écrit des fichiers Excel.

Cependant, je trouve read.xlsx fonction lente, lors de l'ouverture de gros fichiers Excel. read.xlsx2 fonction est beaucoup plus rapide, mais ne pas quess la classe vector de données.cadre de colonnes. Vous devez utiliser colClasses de commande pour spécifier la colonne désirée classes, si vous utilisez read.xlsx2 fonction. Voici un exemple pratique:

read.xlsx("filename.xlsx", 1) lit de votre fichier et rend les données.image de la colonne de classes presque utile, mais il est très lent pour de grands ensembles de données. Fonctionne aussi pour .xls fichiers.

read.xlsx2("filename.xlsx", 1) est plus rapide, mais vous aurez à définir la colonne classes manuellement. Un raccourci pour exécuter la commande deux fois (voir l'exemple ci-dessous). character spécification convertit vos colonnes à des facteurs. Utiliser Dateet POSIXct options pour le moment.

coln <- function(x){y <- rbind(seq(1,ncol(x))); colnames(y) <- colnames(x)
rownames(y) <- "col.number"; return(y)} # A function to see column numbers

data <- read.xlsx2("filename.xlsx", 1) # Open the file 

coln(data)    # Check the column numbers you want to have as factors

x <- 3 # Say you want columns 1-3 as factors, the rest numeric

data <- read.xlsx2("filename.xlsx", 1, colClasses= c(rep("character", x),
rep("numeric", ncol(data)-x+1)))

19voto

Chase Points 27342

J'ai eu de la chance avec XLConnect : http://cran.r-project.org/web/packages/XLConnect/index.html

13voto

Brandon Bertelsen Points 13424
 library(RODBC)
file.name <- "file.xls"
sheet.name <- "Sheet Name"

## Connect to Excel File Pull and Format Data
excel.connect <- odbcConnectExcel(file.name)
dat <- sqlFetch(excel.connect, sheet.name, na.strings=c("","-"))
odbcClose(excel.connect)
 

Personnellement, j'aime RODBC et je peux le recommander.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X