93

Excel ワークシートを R に読み込むために使用できることを理解していXLConnectます。たとえば、これはtest.xlsR に呼び出されたワークブックの最初のワークシートを読み込みます。

library(XLConnect)
readWorksheetFromFile('test.xls', sheet = 1)

複数のワークシートを含む Excel ワークブックがあります。

ワークブック内のすべてのワークシートを、リストの各要素が特定のシートの data.frame であり、各要素の名前が Excel のワークシートの名前に対応する R のリストにインポートするにはどうすればよいですか?

4

11 に答える 11

139

readxl を使用して回答を更新しました (2015 年 6 月 22 日)

この質問を投稿してから、readxlパッケージがリリースされました。xlsxlsxフォーマットの両方をサポートしています。重要なのは、他の 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')
于 2012-10-18T01:29:14.607 に答える
46

XLConnect の関数のほとんどは、既にベクトル化されていることに注意してください。これは、明示的なベクトル化を行うことなく、1 回の関数呼び出しですべてのワークシートを読み取ることができることを意味します。

require(XLConnect)
wb <- loadWorkbook(system.file("demoFiles/mtcars.xlsx", package = "XLConnect"))
lst = readWorksheet(wb, sheet = getSheets(wb))

XLConnect 0.2-0 では、lstすでに名前付きリストになっています。

于 2012-10-18T06:31:01.417 に答える
36

この古い質問に出くわしましたが、最も簡単なアプローチがまだ欠けていると思います。

rioたった 1 行のコードですべての 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)
于 2018-03-23T14:25:46.033 に答える
18

これは質問に対する最初のヒットであるため、複数のシートのExcelをリストして読む:

ここにopenxlsx解決策があります:

filename <-"myFilePath"

sheets <- openxlsx::getSheetNames(filename)
SheetList <- lapply(sheets,openxlsx::read.xlsx,xlsxFile=filename)
names(SheetList) <- sheets
于 2018-01-18T09:50:33.437 に答える
7

ワークブックを読み込んでから、 を使用してlapply、次のようなことを行うことができます。getSheetsreadWorksheet

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)})
于 2012-10-18T01:14:28.310 に答える
5

ワークブックから複数のシートを読み取るには、次のように 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) は、すべてのシートのすべてのデータ行を 1 つのデータ フレームにpath_to_workbook配置します。データの場所は "dir/of/the/data/workbook" です。

于 2018-05-25T19:57:27.693 に答える
3

excel.linkが仕事をします。

実際、XLConnect と比較して使いやすいことがわかりました (どちらのパッケージもそれほど使いにくいというわけではありません)。両方の学習曲線は約 5 分でした。

余談ですが、 http://cran.r-project.org/web/packages/available_packages_by_name.htmlを参照すると、「Excel」という単語に言及しているすべての R パッケージを簡単に見つけることができます。

于 2014-04-02T21:36:43.880 に答える