R/R basic

엑셀 파일 부르기, sheet별로 불러서 통합하기 (read_excel)

시키테이 2022. 1. 10. 22:42
반응형

엑셀 파일 부를 때 쓰는 함수는 read_excel입니다. readxl library를 다운 받으셔야 해요. 엑셀 파일이 있는 곳으로 워킹 폴더 바꿔주시구요 setwd(). 

library(readxl)
setwd(...)

 

예를 들어 해당 폴더에 data.xlsx라는 엑셀 파일이 있다고 합시다. 그리고 여기에 sheet가 하나밖에 없다고 하면, 그냥

df<-read_excel("data.xlsx") 이렇게 하면 바로 읽힙니다. 만약 excel sheet가 3개 있는데 두 번째 sheet만 읽고 싶다고 하면 

df<-read_excel("data.xlsx", sheet=2)

 sheet이름으로 부르고 싶다. sheet 이름이 2016이다고 하면 2016은 숫자가 아니라 문자니까 따옴표를 적어주시고

df<-read_excel("data.xlsx", sheet="2016")

만약에 엑셀 파일에 있는 모든 sheet를 한꺼번에 열고 싶다고 하면, 일단 각 엑셀 sheet를 데이터프레임으로 열어서 이걸 리스트에 넣는 식으로 해야 합니다. 이 때는 일괄적으로 모든 함수를 적용시키는 lapply라는 함수를 쓰면 되는데요. 우선 엑셀 파일에 있는 모든 sheet 이름을 갖고 리스트를 만든 다음에 이 리스트에 lapply를 적용시키면 됩니다. 

sp.list <- excel_sheets("data.xlsx")
df <- lapply(sp.list, read_excel, path="data.xlsx")

만약에 이런 경우라면 어떨까요. 어떤엑셀 파일이 있는데 각 연도별 sheet가 있고 (2021, 2020, 2019... 이런 식으로 sheet 이름이 있음), 각 sheet에 있는 칼럼 내용은 동일해서 그냥 하나로 다 합쳐버리고 싶다 (2021년 sheet에 총매출액, 매출총이익, 순이익 3가지 항목이 있고, 2020년 sheet에도 같은 내용..). 

 

그러면 저번에 말씀 드린 do.call로 묶어버리면 됩니다. 단 이 때는 칼럼 이름이 정확히 같아야 합니다. 그래야 rbind를 쓸 수 있어요. 

sp.list <- excel_sheets("data.xlsx")
df <- lapply(sp.list, read_excel, path="data.xlsx")
master_file<-as.data.frame(do.call(rbind,df)) #df 리스트에 있는 거 다 합쳐라
반응형