엑셀 파일의 모든 시트 읽어오기
엑셀 화일의 모든 시트(sheet) 읽어오기
엑셀의 한 화일 안에는 여러 개의 시트가 존재할 수 있습니다.
package:readxl
의 read_excel(path=filename, sheet=)
을 통해 시트를 하나씩 읽어올 수 있습니다만, 일단 모든 시트를 읽은 후에 R에서 전처리하는게 편할 수도 있습니다.
다음의 코드는 한 화일 내의 모든 시트를 시트 이름과 동일한 객체 이름으로 불러 읽습니다. 만약 동일한 객체가 이미 존재한다면 “이미 존재한다”는 메세지와 함께 중단합니다. (excel_example.xls
)
library(readxl)
rm(list=ls())
fn = "excel_example.xls"
vSh <- excel_sheets(fn)
if ( length(vSh) > 0 ) {
for (iSh in 1:(length(vSh))) {
vname <- vSh[iSh]
if (exists(vname)) {
cat('\b\b변수 ', vname, '이(가) 이미 존재합니다.\n')
break
}
assign(vname, read_excel(fn, sheet=vSh[iSh]))
}
} else {
cat('No Sheet!!!\n')
}
vSh
ls()
## [1] "FirstSheet" "Tomato" "Ketchup"
## [1] "FirstSheet" "fn" "iSh" "Tomato" "vname" ## [6] "vSh"
실행이 끝난 후 ls()
를 하거나, RStudio-Enviornment([Ctrl]+[8]
)의 Data를 보면 시트 이름과 동일한 데이터 프레임을 확인할 수 있다.
stackoverflow에는 모든 시트를 하나의 리스트로 불러오는 함수가 소개되어 있네요.
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")
연습문제
서울시 한강공원 이용객 현황 (2009_2013년).xls
을 읽어오려고 합니다. 하지만 분명 화일 이름을 정확히 적었음에도 에러가 납니다. 무엇이 문제일까요?
library(readxl)
readxl::read_excel('서울시 한강공원 이용객 현황 (2009_2013년).xls', sheet=1)
## Error: ## filepath: D:\git\dataanalysiswithr04\서울시 한강공원 이용객 현황 (2009_2013년).xls ## libxls error: Unable to open file
위의 글은 R로 하는 빅데이터 분석: 데이터 전처리와 시각화의 일부를 발췌, 각색한 것입니다.
Leave a comment