据我所知, XLConnect
可以用来读取Excel工作表为R.例如,这会读一个工作簿中第一个工作表称为test.xls
为R.
library(XLConnect)
readWorksheetFromFile('test.xls', sheet = 1)
我有一个Excel工作簿与多个工作表。
如何在工作簿中的所有工作表被导入到R A列表,列表中的每个元素是给定片data.frame,和其中每个元素的名称对应于在Excel工作表的名称?
据我所知, XLConnect
可以用来读取Excel工作表为R.例如,这会读一个工作簿中第一个工作表称为test.xls
为R.
library(XLConnect)
readWorksheetFromFile('test.xls', sheet = 1)
我有一个Excel工作簿与多个工作表。
如何在工作簿中的所有工作表被导入到R A列表,列表中的每个元素是给定片data.frame,和其中每个元素的名称对应于在Excel工作表的名称?
由于张贴这个问题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')
请注意,大多数的XLConnect的功能已经量化。 这意味着你可以读取一个函数调用的所有工作表,而不必做明确的量化:
require(XLConnect)
wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect"))
lst = readWorksheet(wb, sheet = getSheets(wb))
随着XLConnect 0.2-0 地表温度将已经命名列表。
由于这是数一击的问题:读多纸张赛过列表:
这里是openxlsx
的解决方案:
filename <-"myFilePath"
sheets <- openxlsx::getSheetNames(filename)
SheetList <- lapply(sheets,openxlsx::read.xlsx,xlsxFile=filename)
names(SheetList) <- sheets
来自官方的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
我偶然发现这个老问题,我认为最简单的方法是人仍下落不明。
您可以使用rio
导入所有的Excel工作表只用一行代码。
library(rio)
data_list <- import_list("test.xls")
如果你是一个球迷tidyverse
,你可以很容易地通过添加导入它们tibbles setclass
参数的函数调用。
data_list <- import_list("test.xls", setclass = "tbl")
假设他们有相同的格式,你可以很容易地通过设置排将它们绑定rbind
参数TRUE
。
data_list <- import_list("test.xls", setclass = "tbl", rbind = TRUE)
您可以加载的工作簿,然后使用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)})
excel.link将做的工作。
我居然发现它更容易使用相比,XLConnect(没有,要么包是很难用)。 两个学习曲线是5分钟左右。
顺便说一句,你可以很容易地发现,通过浏览提及“创先争优”所有的R包http://cran.r-project.org/web/packages/available_packages_by_name.html
我想上面的,并与我的20MB的Excel我需要转换包括的数据量问题; 因此上述没有为我工作。
更多的研究后,我偶然发现了openxlsx而这一次终于做的伎俩(快速) 导入大XLSX文件为R?
https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf
为了从工作簿读取多个片材,按如下方式使用readxl包:
library(readxl)
library(dplyr)
final_dataFrame <- bind_row(path_to_workbook %>%
excel_sheets() %>%
set_names() %>%
map(read_excel, path = path_to_workbook))
这里,bind_row(dplyr)会把所有的数据行从所有片材到一个数据帧,并path_to_workbook是“DIR /该/数据/工作簿/的”。