Skip to content

Latest commit

 

History

History
203 lines (120 loc) · 6.88 KB

chapter9withExcel.md

File metadata and controls

203 lines (120 loc) · 6.88 KB

9.1.3 XLConnect 패키지 사용

엑셀의 데이터를 읽고 쓰는 기능을 보완해 주는 R 패키지는 몇 개 있으나, 두 기능이 잘 지원되고 패키지 설명이 잘 되어 있어서 책에서는 XLConnect이라는 패키지를 소개하였다.

library(XLConnect)
## XLConnect 0.2-7 by Mirai Solutions GmbH
## http://www.mirai-solutions.com ,
## http://miraisolutions.wordpress.com
  • XLConnect 패키지는 설명이 매우 자세하게 되어 있다. 비니에트를 보기 위해서는 다음과 R 콘솔에서 실행한다.
vignette("XLConnect")

9.1.4 XLConnect 패키지에서 사용되는 개념

XLConnect 패키지는 R 언어의 connection이라는 개념을 이해하고 있다면 매우 쉽게 접근할 수 있다. 이 connection에 대한 정보를 보고자 한다면 R 콘솔에서 다음과 같이 실행한다. R 언어는 connection을 사용하여 파일이나 웹 페이지 등을 읽고 쓰고 한다.

help(connection)

XLConnect에서는 엑셀 파일을 workbook이라는 부르는 객체를 사용하여 다룬다. 보통 엑셀에서 부르는 통합문서라고 보면 된다. 보통의 하나의 통합문서는 보통 다수의 워크시트로 구성되게 된다.

그래서, 현재 폴더에 있는 trial.xls라는 파일에 대한 connection을 만들기 위해서는 loadWorkbook()이라는 함수를 사용한다. 만약, 현재 폴더에 없는 파일에 대한 connection을 만들기 위해서는 이 함수를 사용하면서 이름을 부여하고 create=TRUE라는 옵션을 사용한다.

wb1 <- loadWorkbook("trial.xls")
wb2 <- loadWorkbook("my.xls", create = TRUE)

9.1.5 엑셀 자료 읽기

아무래도 엑셀의 데이터를 읽어야 하는 경우가 많아서, 먼저 엑셀 데이터를 읽는 것부터 알아보자. 먼저 connection을 설정한다.

wb1 <- loadWorkbook("trial.xls")

이 워크북(workbook) 객체가 어떤 워크시트를 가지고 있는지 확인하기 위해서는 getSheets()함수를 사용한다.

getSheets(wb1)
## [1] "iris"

실제로 자료를 읽기 위해서는 readWorksheet()라는 함수를 사용한다. 이 함수는 워크시트 단위로 데이터를 읽는다. 따라서, 여러 워크시트가 있는 엑셀 자료라면 방문 설명한 getWorksheets()함수를 통해서 알아낸 워크시트를 이름을 사용하거나, 혹은 첫 워크시트를 1번이라고 가정하고 그 위치를 사용하여 읽는다. 이것을 정하는 것이 이 함수는 sheet라는 옵션이다.

df <- readWorksheet(wb1, sheet = 1)
head(df, 10)
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1           5.1         3.5          1.4         0.2  setosa
## 2           4.9         3.0          1.4         0.2  setosa
## 3           4.7         3.2          1.3         0.2  setosa
## 4           4.6         3.1          1.5         0.2  setosa
## 5           5.0         3.6          1.4         0.2  setosa
## 6           5.4         3.9          1.7         0.4  setosa
## 7           4.6         3.4          1.4         0.3  setosa
## 8           5.0         3.4          1.5         0.2  setosa
## 9           4.4         2.9          1.4         0.2  setosa
## 10          4.9         3.1          1.5         0.1  setosa

위의 결과는 워크시트의 이름을 사용하는 경우 다음과 같이 옵션을 설정한다.

df <- readWorksheet(wb1, sheet = "risis")

위와 같이 connection으로 워크북 객체를 만들고, 해당 워크북에 들어있는 워크시트를 읽는 과정을 거치는 것이 일반적인데, 단순히 데이터를 읽어만 오는 경우에는 readWorksheetFromFile()이라는 함수를 쓰면 워크북을 만드는 과정을 생략할 수 있다.

df2 <- readWorksheetFromFile("trial.xls", sheet = 1)
head(df2, 10)
##    Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1           5.1         3.5          1.4         0.2  setosa
## 2           4.9         3.0          1.4         0.2  setosa
## 3           4.7         3.2          1.3         0.2  setosa
## 4           4.6         3.1          1.5         0.2  setosa
## 5           5.0         3.6          1.4         0.2  setosa
## 6           5.4         3.9          1.7         0.4  setosa
## 7           4.6         3.4          1.4         0.3  setosa
## 8           5.0         3.4          1.5         0.2  setosa
## 9           4.4         2.9          1.4         0.2  setosa
## 10          4.9         3.1          1.5         0.1  setosa

9.1.7 R 객체를 엑셀 파일로 저장

R의 데이터프레임 등을 엑셀로 저장하기 위한 방법이다. 다음과 같은 과정을 거친다.

  1. 먼저 작업할 대상인 워크북 connection을 만든다.
  2. 위 워크북에 워크시트를 만든다.
  3. 워크시트에 데이터를 적는다.
  4. 전에 워크북을 저장한다.

R에 기본적으로 들어있는 mtcars라는 데이터셋을 mtcars.xls로 저장해 본다. 다음 코드는 이 파일이 여러 번 실행되는 경우 앞선 과정에서 생기는 파일을 제거한다.

if (file.exists("mtcars.xls")) file.remove("mtcars.xls")
## [1] TRUE

먼저 작업할 워크북의 설정이다.

wb2 <- loadWorkbook("mtcars.xls", create = TRUE)

이 워크북에 example이라는 워크시트를 만든다. 워크시트를 만드는 함수는 creatSheet()이다.

createSheet(wb2, "example")

이 워크시트에 mtcars 데이터셋을 적는다. 기록하는 함수는 writeWorksheet()이다.

writeWorksheet(wb2, mtcars, sheet = "example")

다음은 전체 워크시트를 저장하는 과정으 saveWorkboot() 함수를 사용한다.

saveWorkbook(wb2, "mtcars.xls")

엑셀 데이터를 읽어들이는 과정과 마찬가지로 이런 이런 과정이 귀찮은 경우에는 writeWorksheetToFile()이라는 함수를 사용할 수 있다.

다음 코드는 기존의 파일을 없애기 위한 것이다.

if (file.exists("mtcars2.xls")) file.remove("mtcars2.xls")
## [1] TRUE
writeWorksheetToFile("mtcars2.xls", mtcars, sheet = "example2")

정리

XLConnect에는 여기서 설명한 간단한 기능 이외에도 엑셀과 관련된 다양한 기능들이 있다. 엑셀을 자주 사용하는 경우에는 앞서 설명한 비니에트와 매뉴얼을 상세히 읽어보면 많은 도움이 될 것이다.