C'est une question complémentaire à celle-ci . Quel est le moyen le plus rapide de lire des fichiers .xlsx
Dans R?
J'utilise library(xlsx)
pour lire les données de 36 fichiers .xlsx
. Ça marche. Cependant, le problème est que cela prend beaucoup de temps (bien plus de 30 minutes), surtout si l'on considère que les données de chaque fichier ne sont pas si grandes (matrice de taille 3 * 3652 dans chaque fichier). À cette fin, existe-t-il une meilleure solution pour résoudre ce problème, s'il vous plaît? Existe-t-il un autre moyen rapide de lire .xlsx
Dans R? Ou puis-je mettre les 36 fichiers dans un seul fichier csv rapidement puis les lire dans R?
De plus, je viens de réaliser que readxl
ne peut pas écrire xlsx. Y a-t-il un équivalent pour gérer l'écriture au lieu de la lecture?
"Réponse à ceux qui ont voté contre cette question":
Cette question porte sur les faits plutôt que sur les soi-disant "réponses d'opinions et spam" car la vitesse est le temps et le temps est un fait mais [~ # ~] pas [~ # ~] opinion.
Nouvelle mise à jour:
On peut peut-être nous expliquer en langage simple pourquoi certaines méthodes fonctionnent beaucoup plus rapidement que d'autres. Je suis certainement confus à ce sujet.
Voici un petit test de référence. Résultats: readxl::read_xlsx
en moyenne environ deux fois plus vite que openxlsx::read.xlsx
sur différents nombres de lignes (n
) et de colonnes (p
) en utilisant les paramètres standard.
options(scipen=999) # no scientific number format
nn <- c(1, 10, 100, 1000, 5000, 10000, 20000, 30000)
pp <- c(1, 5, 10, 20, 30, 40, 50)
# create some Excel files
l <- list() # save results
tmp_dir <- tempdir()
for (n in nn) {
for (p in pp) {
name <-
cat("\n\tn:", n, "p:", p)
flush.console()
m <- matrix(rnorm(n*p), n, p)
file <- paste0(tmp_dir, "/n", n, "_p", p, ".xlsx")
# write
write.xlsx(m, file)
# read
elapsed <- system.time( x <- openxlsx::read.xlsx(file) )["elapsed"]
df <- data.frame(fun = "openxlsx::read.xlsx", n = n, p = p,
elapsed = elapsed, stringsAsFactors = F, row.names = NULL)
l <- append(l, list(df))
elapsed <- system.time( x <- readxl::read_xlsx(file) )["elapsed"]
df <- data.frame(fun = "readxl::read_xlsx", n = n, p = p,
elapsed = elapsed, stringsAsFactors = F, row.names = NULL)
l <- append(l, list(df))
}
}
# results
d <- do.call(rbind, l)
library(ggplot2)
ggplot(d, aes(n, elapsed, color= fun)) +
geom_line() + geom_point() +
facet_wrap( ~ paste("columns:", p)) +
xlab("Number of rows") +
ylab("Seconds")
Pour écrire un fichier Excel, readxl
a un équivalent appelé writexl
. En ce qui concerne le meilleur package pour lire un fichier Excel, je pense que le benchmark fourni ci-dessus est assez bon.
La seule raison pour laquelle j'utiliserais xlsx
pour écrire un package serait si je devais écrire plusieurs feuilles Excel dans une .xlsx
fichier.