Ich verstehe, dass XLConnect
dies zum Lesen eines Excel-Arbeitsblatts in R verwendet werden kann. Dies würde beispielsweise das erste Arbeitsblatt in einer Arbeitsmappe lesen, die test.xls
in R aufgerufen wird.
library(XLConnect)
readWorksheetFromFile('test.xls', sheet = 1)
Ich habe eine Excel-Arbeitsmappe mit mehreren Arbeitsblättern.
Wie können alle Arbeitsblätter in einer Arbeitsmappe in eine Liste in R importiert werden, in der jedes Element der Liste ein Datenrahmen für ein bestimmtes Blatt ist und in der der Name jedes Elements dem Namen des Arbeitsblatts in Excel entspricht?
xlconnect
und erlaubt dasreadxl
Paketxlsx
, Excel-Dateien inR
(allen Blättern oder nur einigen) zu manipulierenAntworten:
Aktualisierte Antwort mit readxl (22. Juni 2015)
Seit dem Posten dieser Frage wurde das
readxl
Paket freigegeben. Es unterstützt sowohlxls
als auchxlsx
Format. Im Gegensatz zu anderen Excel-Importpaketen funktioniert es unter Windows, Mac und Linux, ohne dass zusätzliche Software installiert werden muss.Eine Funktion zum Importieren aller Blätter in eine Excel-Arbeitsmappe wäre also:
library(readxl) read_excel_allsheets <- function(filename, tibble = FALSE) { # I prefer straight data.frames # but if you like tidyverse tibbles (the default with read_excel) # then just pass tibble = TRUE sheets <- readxl::excel_sheets(filename) x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X)) if(!tibble) x <- lapply(x, as.data.frame) names(x) <- sheets x }
Dies könnte aufgerufen werden mit:
mysheets <- read_excel_allsheets("foo.xls")
Alte Antwort
Aufbauend auf der Antwort von @mnel ist hier eine einfache Funktion, die eine Excel-Datei als Argument verwendet und jedes Blatt als data.frame in einer benannten Liste zurückgibt.
library(XLConnect) importWorksheets <- function(filename) { # filename: name of Excel file workbook <- loadWorkbook(filename) sheet_names <- getSheets(workbook) names(sheet_names) <- sheet_names sheet_list <- lapply(sheet_names, function(.sheet){ readWorksheet(object=workbook, .sheet)}) }
So könnte es aufgerufen werden mit:
importWorksheets('test.xls')
quelle
readxl
das eineexcel_sheets
Methode hat. wunderbar.filename
. Beispiel: read_excel_allsheets ("my / path / to / file / example.xls")lapply(excel_sheets(file.path), function(x) read_excel(file.path, x))
. Wenn Sie das Nicht-Tibble bevorzugen, wickeln Sie einfach read_excel einas.data.frame()
. Namen müssten danach vergeben werden.Beachten Sie, dass die meisten Funktionen von XLConnect bereits vektorisiert sind. Dies bedeutet, dass Sie alle Arbeitsblätter mit einem Funktionsaufruf einlesen können, ohne eine explizite Vektorisierung durchführen zu müssen:
require(XLConnect) wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect")) lst = readWorksheet(wb, sheet = getSheets(wb))
Mit XLConnect 0.2-0 wird lst bereits eine benannte Liste sein.
quelle
require(XLConnect) wb <- loadWorkbook("excel.xlsx") lst = readWorksheet(wb, sheet = getSheets(wb))
system.file()
hat auch bei mir nicht funktioniert.Ich bin über diese alte Frage gestolpert und denke, der einfachste Ansatz fehlt noch.
Sie können
rio
alle Excel-Tabellen mit nur einer Codezeile importieren.library(rio) data_list <- import_list("test.xls")
Wenn Sie ein Fan von sind
tidyverse
, können Sie sie einfach als tibbles importieren, indem Sie dassetclass
Argument zum Funktionsaufruf hinzufügen .data_list <- import_list("test.xls", setclass = "tbl")
Angenommen, sie haben dasselbe Format. Sie können sie leicht in Zeilen binden, indem Sie das
rbind
Argument auf setzenTRUE
.data_list <- import_list("test.xls", setclass = "tbl", rbind = TRUE)
quelle
rio::import_list
ist eine gute Option. Es kann auch eine Teilmenge der Blätter importieren, z. B.import_list("test.xls", which = c(1, 2))
was sehr nützlich sein kann. Ich bin damit einverstanden, dass dies hier die einfachste Option ist.which
Argument. Es könnte in der Tat nützlich sein.Aus der offiziellen
readxl
(tidyverse) Dokumentation (Änderung der ersten Zeile):path <- "data/datasets.xlsx" path %>% excel_sheets() %>% set_names() %>% map(read_excel, path = path)
Details unter: http://readxl.tidyverse.org/articles/articles/readxl-workflows.html#iterate-over-multiple-worksheets-in-a-workbook
quelle
df <- path %>% excel_sheets() %>% set_names() %>% map_dfr(read_excel, path = path, .id = "SheetName")
Da dies der erste Treffer bei der Frage ist: Lesen Sie das Excel mit mehreren Blättern, um es aufzulisten:
Hier ist die
openxlsx
Lösung:filename <-"myFilePath" sheets <- openxlsx::getSheetNames(filename) SheetList <- lapply(sheets,openxlsx::read.xlsx,xlsxFile=filename) names(SheetList) <- sheets
quelle
Sie können das Arbeitsbuch laden und dann verwenden
lapply
,getSheets
undreadWorksheet
und etwas tun.wb.mtcars <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect")) sheet_names <- getSheets(wb.mtcars) names(sheet_names) <- sheet_names sheet_list <- lapply(sheet_names, function(.sheet){ readWorksheet(object=wb.mtcars, .sheet)})
quelle
Verwenden Sie das readxl-Paket wie folgt, um mehrere Blätter aus einer Arbeitsmappe zu lesen:
library(readxl) library(dplyr) final_dataFrame <- bind_rows(path_to_workbook %>% excel_sheets() %>% set_names() %>% map(read_excel, path = path_to_workbook))
Hier fügt bind_rows (
dplyr
) alle Datenzeilen aus allen Blättern in einen Datenrahmen ein undpath_to_workbook
ist der Speicherort Ihrer Daten: "dir / of / the / data / workbook".quelle
excel.link erledigt den Job.
Ich fand es im Vergleich zu XLConnect tatsächlich einfacher zu verwenden (nicht, dass eines der beiden Pakete so schwierig zu verwenden ist). Die Lernkurve für beide betrug ungefähr 5 Minuten.
Nebenbei können Sie leicht alle R-Pakete finden, die das Wort "Excel" erwähnen, indem Sie zu http://cran.r-project.org/web/packages/available_packages_by_name.html navigieren
quelle
Ich habe das oben genannte versucht und hatte Probleme mit der Datenmenge, aus der mein 20 MB Excel, das ich konvertieren musste, bestand. Daher hat das oben genannte für mich nicht funktioniert.
Nach weiteren Recherchen bin ich auf openxlsx gestoßen und dieser hat es endlich geschafft (und zwar schnell), eine große xlsx-Datei in R zu importieren?
https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf
quelle
Hinzufügen zu Pauls Antwort. Die Blätter können auch folgendermaßen verkettet werden:
data = path %>% excel_sheets() %>% set_names() %>% map_df(~ read_excel(path = path, sheet = .x), .id = "Sheet")
Erforderliche Bibliotheken:
if(!require(pacman))install.packages("pacman") pacman::p_load("tidyverse","readxl","purrr")
quelle