Excel 워크북의 모든 워크시트를 data.frames와 함께 R 목록으로 읽습니다.
이해는 합니다.XLConnect
Excel 워크시트를 R로 읽는 데 사용할 수 있습니다.예를 들어, 이것은 워크북의 첫 번째 워크시트를 읽습니다.test.xls
R로 변환합니다.
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_workbook
the "/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
'programing' 카테고리의 다른 글
텍스트 파일을 Excel 시트로 가져오는 중 (0) | 2023.04.17 |
---|---|
C# EPplus OpenXML의 행 수 (0) | 2023.04.17 |
Bash 변수 할당에서 명령을 찾을 수 없음 오류 (0) | 2023.04.17 |
Generic.xaml의 특별한 점은 무엇입니까? (0) | 2023.04.17 |
SQL Server에서의 이스케이프 문자 (0) | 2023.04.17 |