programing

Excel 워크북의 모든 워크시트를 data.frames와 함께 R 목록으로 읽습니다.

codeshow 2023. 4. 17. 22:09
반응형

Excel 워크북의 모든 워크시트를 data.frames와 함께 R 목록으로 읽습니다.

이해는 합니다.XLConnectExcel 워크시트를 R로 읽는 데 사용할 수 있습니다.예를 들어, 이것은 워크북의 첫 번째 워크시트를 읽습니다.test.xlsR로 변환합니다.

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

여러 워크시트가 포함된 Excel 워크북이 있습니다.

워크북의 모든 워크시트를 R의 목록으로 가져오려면 어떻게 해야 합니까?목록의 각 요소는 지정된 시트의 data.frame이며 각 요소의 이름은 Excel의 워크시트 이름과 일치합니다.

readxl을 사용한 답변 갱신(2015년 6월 22일)

이 질문을 올린 이후로readxl패키지가 출시되었습니다.양쪽을 모두 지원합니다.xls그리고.xlsx포맷합니다.중요한 것은 다른 Excel Import 패키지와 달리 Windows, Mac 및 Linux에서 추가 소프트웨어를 설치할 필요 없이 사용할 수 있다는 점입니다.

따라서 Excel 워크북의 모든 시트를 Import하는 기능은 다음과 같습니다.

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 lst는 이미 이름 있는 리스트가 됩니다.

나는 우연히 이 오래된 질문을 발견했는데, 가장 쉬운 접근법이 여전히 부족하다고 생각한다.

사용할 수 있습니다.rio코드 한 줄만으로 모든 엑셀 시트를 Import할 수 있습니다.

library(rio)
data_list <- import_list("test.xls")

만약 당신이 그 팬 여러분tidyverse를 추가하여 쉽게 tibble로 Import할 수 있습니다.setclass인수를 지정합니다.

data_list <- import_list("test.xls", setclass = "tbl")

포맷이 같다고 가정하면, 다음과 같이 설정하면 쉽게 행바인드를 할 수 있습니다.rbind에 대한 의론.TRUE.

data_list <- import_list("test.xls", setclass = "tbl", rbind = TRUE)

공식에서readxl(가로 방향) 설명서(첫 번째 줄 변경):

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 를 참조해 주세요.

이것이 질문의 첫 번째 히트 항목이기 때문에, 리스트 하려면 , 복수의 시트 엑셀을 읽어주세요.

여기 있습니다.openxlsx솔루션:

filename <-"myFilePath"

sheets <- openxlsx::getSheetNames(filename)
SheetList <- lapply(sheets,openxlsx::read.xlsx,xlsxFile=filename)
names(SheetList) <- sheets

폴의 대답에 더해서.시트는 다음과 같은 방법으로 연결할 수도 있습니다.

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")

한 후 하실 수 .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_rowsbind_rows」)를 지정합니다.dplyr프레임에 또, 을 참조해 주세요.path_to_workbookthe "/data/deta.", "/data/deta/deta."

excel.link가 작업을 수행합니다.

실제로 XLConnect에 비해 사용하기 쉬웠습니다(어느 패키지도 사용하기 어려운 것은 아닙니다).양쪽의 학습곡선은 약 5분이었다.

덧붙여서, 「Excel」이라고 하는 단어를 기재한 모든 R 패키지는, http://cran.r-project.org/web/packages/available_packages_by_name.html 에 액세스 하면 간단하게 찾을 수 있습니다.

@Jeromy Anglim의 매우 유용한 응답을 단순화하기 위해서만:

allsheets <- sapply(readxl::excel_sheets("your_file.xlsx"), simplify = F, USE.NAMES = T,
            function(X) readxl::read_excel("your_file.xlsx", sheet = X))

상기의 작업을 실시했지만, 변환에 필요한 20MB Excel의 데이터량에 문제가 있어, 상기의 조작이 되지 않았습니다.

좀 더 조사를 한 후 우연히 openxlsx를 발견했는데, 이것이 드디어 큰 xlsx 파일을 R로 Import하는성공했습니다.

https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf

다음은 RDCOM Client에 기반한 다른 접근법입니다.

library(RDCOMClient)

dir_Path <- "D:\\Dropbox\\Reponses_Stackoverflow\\stackoverflow_294\\"
excel_File <- "test_File.xlsx"
path_Excel_File <- paste0(dir_Path, excel_File)

xlApp <- COMCreate("Excel.Application")
xlApp[["Visible"]] <- TRUE
xlWbk <- xlApp$Workbooks()$Open(path_Excel_File)
Sheets <- xlWbk$Sheets() 
nb_Sheets <- Sheets$count() 

list_DF_By_Sheet <- list()

for(l in 1 : nb_Sheets)
{
  obj_Range <- Sheets[[l]]$Range("A:B")
  val <- obj_Range$value()
  nb_Val <- length(val)
  list_Vector <- list()
  
  for(i in 1 : nb_Val)
  {
    list_Vector[[i]] <- unlist(val[[i]])
  }
  
  df_Sheet <- do.call("cbind", list_Vector)
  list_DF_By_Sheet[[l]] <- df_Sheet
}

list_DF_By_Sheet

언급URL : https://stackoverflow.com/questions/12945687/read-all-worksheets-in-an-excel-workbook-into-an-r-list-with-data-frames

반응형