我知道XLConnect
可以将Excel工作表读入R。例如,这将读取工作簿中称为test.xls
R的第一个工作表。
library(XLConnect)
readWorksheetFromFile('test.xls', sheet = 1)
我有一个包含多个工作表的Excel工作簿。
如何将工作簿中的所有工作表导入R中的列表中,其中列表的每个元素都是给定工作表的data.frame,并且每个元素的名称与Excel中工作表的名称相对应?
我知道XLConnect
可以将Excel工作表读入R。例如,这将读取工作簿中称为test.xls
R的第一个工作表。
library(XLConnect)
readWorksheetFromFile('test.xls', sheet = 1)
我有一个包含多个工作表的Excel工作簿。
如何将工作簿中的所有工作表导入R中的列表中,其中列表的每个元素都是给定工作表的data.frame,并且每个元素的名称与Excel中工作表的名称相对应?
Answers:
自发布此问题以来,该readxl
软件包已发布。它同时支持xls
和xlsx
格式。重要的是,与其他excel导入软件包相比,它可以在Windows,Mac和Linux上运行,而无需安装其他软件。
因此,用于在Excel工作簿中导入所有工作表的功能是:
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
}
可以这样调用:
mysheets <- read_excel_allsheets("foo.xls")
在@mnel提供的答案的基础上,这是一个简单的函数,它将Excel文件作为参数,并将每个工作表作为data.frame返回到命名列表中。
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)})
}
因此,可以通过以下方式调用它:
importWorksheets('test.xls')
readxl
有一种excel_sheets
方法。精彩。
filename
。例如,read_excel_allsheets(“ my / path / to / file / example.xls”)
lapply(excel_sheets(file.path), function(x) read_excel(file.path, x))
。如果您更喜欢非标记,只需将read_excel包装在中as.data.frame()
。之后必须分配名称。
请注意,大多数XLConnect功能已被矢量化。这意味着您可以通过一个函数调用来读取所有工作表,而不必进行显式矢量化:
require(XLConnect)
wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect"))
lst = readWorksheet(wb, sheet = getSheets(wb))
使用XLConnect 0.2-0,lst将已经是一个命名列表。
require(XLConnect) wb <- loadWorkbook("excel.xlsx") lst = readWorksheet(wb, sheet = getSheets(wb))
system.file()
对我也不起作用。
我偶然发现了这个古老的问题,我认为最简单的方法仍然缺失。
您可以只用rio
一行代码来导入所有Excel工作表。
library(rio)
data_list <- import_list("test.xls")
如果您是的爱好者tidyverse
,可以通过将setclass
参数添加到函数调用中来轻松地将它们作为小标题导入。
data_list <- import_list("test.xls", setclass = "tbl")
假设它们具有相同的格式,则可以通过将rbind
参数设置为来轻松行绑定它们TRUE
。
data_list <- import_list("test.xls", setclass = "tbl", rbind = TRUE)
rio::import_list
是个不错的选择。它也可以导入工作表的子集,例如import_list("test.xls", which = c(1, 2))
,这可能真的有用。我同意这是最简单的选择。
which
说法。确实可以派上用场。
从官方readxl
(tidyverse)文档(更改第一行):
path <- "data/datasets.xlsx"
path %>%
excel_sheets() %>%
set_names() %>%
map(read_excel, path = path)
有关详细信息,请访问:http : //readxl.tidyverse.org/articles/articles/readxl-workflows.html#iterate-over-multiple-worksheets-in-a-workbook
df <- path %>% excel_sheets() %>% set_names() %>% map_dfr(read_excel, path = path, .id = "SheetName")
由于这是该问题的重头戏:阅读多页Excel即可列出:
这是openxlsx
解决方案:
filename <-"myFilePath"
sheets <- openxlsx::getSheetNames(filename)
SheetList <- lapply(sheets,openxlsx::read.xlsx,xlsxFile=filename)
names(SheetList) <- sheets
您可以加载的工作簿,然后使用lapply
,getSheets
并且readWorksheet
做这样的事情。
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)})
要从工作簿中读取多张图纸,请使用readxl程序包,如下所示:
library(readxl)
library(dplyr)
final_dataFrame <- bind_rows(path_to_workbook %>%
excel_sheets() %>%
set_names() %>%
map(read_excel, path = path_to_workbook))
在这里,bind_rows(dplyr
)将所有工作表中的所有数据行放入一个数据帧中,并且path_to_workbook
是数据的位置:“ dir / of / the / data / workbook”。
excel.link将完成工作。
实际上,我发现与XLConnect相比,它更易于使用(并不是说这两个软件包都很难使用)。两者的学习曲线约为5分钟。
顺便说一句,通过浏览到http://cran.r-project.org/web/packages/available_packages_by_name.html,您可以轻松找到所有提到“ Excel”的R软件包。
我尝试了上述方法,但我转换所需的20MB Excel所包含的数据量出现问题;因此以上对我不起作用。
经过更多研究后,我偶然发现了openxlsx,这终于做到了(快速)将大xlsx文件导入R的窍门 吗?
https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf
补充保罗的答案。表格也可以使用以下方式连接:
data = path %>%
excel_sheets() %>%
set_names() %>%
map_df(~ read_excel(path = path, sheet = .x), .id = "Sheet")
需要的库:
if(!require(pacman))install.packages("pacman")
pacman::p_load("tidyverse","readxl","purrr")
xlconnect
和之外readxl
,软件包还xlsx
允许在R
(全部工作表或仅一些工作表)中操作excel文件