Programing/R- programming

R을 이용하여 엑셀(excel) 파일 읽고 쓰기

sosal 2015. 4. 19. 18:55
반응형

 

/*

 http://sosal.kr/
 * made by so_Sal
 */

 


 

Informatics 하는 사람의 입장에서 MS-office Excel을 쓴다는건 영 환영받지 못할 일이다.

소수점 처리에 문제가 많으며, 빅데이터의 경우 열람이 굉장히 힘들고 느리고, 제한적이기 때문이다.

 

하지만 작은 데이터의 경우, 쉽게 통계적으로 그래프를 그린다거나 눈으로 쉽게 볼 수 있기 때문에 활용도가 높다.

적당히 콘솔로 보기 힘들지만, 엑셀로 GUI로 볼 때 편한 데이터의 경우 Excel 파일로 열람하거나

혹은 엑셀(Excel)로 저장되어있는 데이터를 불러 올 때 gdata 패키지를 쓴다면 R에서도 쉽게 Excel과 연동이 가능하다.

 

 

 

 

 - 공식 gdata 패키지 문서

http://cran.r-project.org/web/packages/gdata/gdata.pdf

 

 

 

 

 - gdata 패키지를 사용하기 위한 perl 설치

 

우선 R에서 gdata 패키지를 이용하려면 perl이 필요하다.

http://strawberryperl.com/

 

저는 default directory에 strawberryperl을 설치하였고, perl의 실행파일 경로는 다음과 같습니다.

"C:\Strawberry\perl\bin\perl5.20.2.exe"


 

 

 

 - gdata 패키지 설치

 

> install.packages("gdata")
--- 현재 세션에서 사용할 CRAN 미러를 선택해 주세요 ---
URL 'http://cran.nexr.com/bin/windows/contrib/3.1/gdata_2.13.3.zip'을 시도합니다
.....

 

간단하게 install.packages 명령어를 사용하여 패키지를 설치할 수 있다.

 

> library(gdata)

라이브러리 함수를 이용하여 설치된 gdata 패키지를 현재 작업공간에 불러올 수 있다.

 

 

 - Perl 설치 확인

> installXLSXsupport(perl = "C:\\Strawberry\\perl\\bin\\perl5.20.2.exe", verbose = FALSE)

Perl XLSX support libraries successfully installed.

 

 

위와 같이 나오지 않는다면, Perl 설치가 제대로 되었는지 확인해야한다.

 

 

 - Excel 파일에 데이터 읽기

 

read.xls(xls, sheet=1, verbose=FALSE, pattern, na.strings=c("NA","#DIV/0!"),..., method=c("csv","tsv","tab"), perl="perl")
xls2csv(xls, sheet=1, verbose=FALSE, blank.lines.skip=TRUE, ..., perl="perl")
xls2tab(xls, sheet=1, verbose=FALSE, blank.lines.skip=TRUE, ..., perl="perl")
xls2tsv(xls, sheet=1, verbose=FALSE, blank.lines.skip=TRUE, ..., perl="perl")
xls2sep(xls, sheet=1, verbose=FALSE, blank.lines.skip=TRUE, ...,method=c("csv","tsv","tab"), perl="perl")
 

다양한 메소드가 존재하지만, 일반적인 xlsx 파일의 경우 read.xls로 자동으로 읽어들일 수 있다.

 

 

다음과 같이 데이터를 구성하여 readTest.xlsx 파일로 저장하였다.

 

> dataTest <- read.xls("readTest.xlsx", sheet="Sheet1")
> dataTest
   Col1 Col2  Col3
1 data1    1   one
2 data2    2   two
3 data3    3 three

 

> typeof(dataTest)
[1] "list"
 

 

 

 

 

 

 

 

엑셀은 tab, comma 등 다양한 delimiter를 지원하기 때문에, 엑셀 포맷으로 쓰는 것은

크게 의미 없다고 생각하여 자세히 다루지는 않으려고 한다.

rdata처럼 Perl을 이용하는 패키지인 WriteXLS를 이용하면  쉽게 excel 파일로 export 할 수 있다.

 

 

 - 공식 WriteXLS 패키지 문서

http://cran.r-project.org/web/packages/WriteXLS/WriteXLS.pdf

 

WriteXLS 패키지 안에는 testPerl과 WriteXLS 2가지 함수가 존재한다.

 

testPerl은 rdata의 installXLSXsupport과 같은 역할을 하며,

WriteXLS는 말그대로 액셀 포맷으로 데이터를 쓰는것을 말한다.

 

WriteXLS 패키지 문서를 참조하면 iris 데이터를 예제로 xlsx 포맷으로 export하는 예제가 잘 나와있다.

물론 Perl이 설치되어야 동작한다.